0

同じクラス内の共有関数から、クラス内でプライベートに宣言された変数/オブジェクトを使用しようとしています。

私の主な目標は、クラス外の共有関数にアクセスできるようにすることですが、変数はプライベートであるため、変数にはアクセスできません。すべての変数/オブジェクト宣言を「共有」として設定することがエレガントな解決策になるとは思いません。

より良い調査のためのスニペットを次に示します。

Module main
    Sub Main()
        MsgBox(xTest.xMain)
    End Sub
End Module

Class xTest
    Private WC As New Net.WebClient()
    Shared Function xMain() As String
        Return WC.DownloadString("http://example.com")
    End Function
End Class

もちろん、これを適切に行うにはどうすればよいでしょうか。

4

2 に答える 2

2

の意味について混乱していると思いますSharedPrivateこれは/ Public/etcと直交しています。

Shared「タイプのインスタンスではなく、タイプに固有」を意味します。特定の変数を見つけるためのインスタンスがないため、Shared関数は使用できません。代わりに変数であると想像してください。クラスに「あなたの名前は何ですか?」と尋ねるようなものです。代わりに、個々のインスタンスごとに名前があります。WCxTestWCnamePersonPerson

論理的かどうかにかかわらず、各メンバー (関数であるか変数であるか) について慎重に検討する必要がありますShared

詳細については、共有メンバーに関する MSDN ページを参照してください。ただし、そこで使用されている説明は気に入りません。「...クラスのすべてのインスタンスで共有されています...」は、そもそもインスタンスが必要なように聞こえます。ありません-メンバーが型自体に関連付けられているだけです。クラスのインスタンスが作成されていない場合でも、共有変数を使用できます。

(余談ですが、WebClientそもそも a をフィールドとして保持することはおそらくないでしょう。WebClientは、作成、使用、および破棄されるように設計されています。また、.NET 命名規則に従うように名前を変更することをお勧めします。)

于 2012-12-04T07:21:04.177 に答える
1

共有関数からアクセスできるようにするには、変数を共有する必要があります。ちなみに、あなたがやろうとしていることでは、共有方法は賢明ではないと思います。

于 2012-12-04T07:19:50.550 に答える