web-dev-qa-db-ja.com

共有と静的の違いは何ですか?

私はC#開発者ですが、レガシーVBアプリを今日継承しており、ドキュメントはこれまでにありません。コードを読み始め、 リストof VBキーワード 5秒ごと。

SharedStaticの違いがわからないと思います。

この投稿を読む: https://stackoverflow.com/a/1980293/1189566

それは述べています:

VBにはstaticがなく、sharedがあります

ただし、上記のリンク先のキーワードのリストを見ると、Staticは予約済みのキーワードです。 Staticはフィールドにのみ適用できるようですが、Sharedはメソッドまたはフィールドにありますか?

最終的には、リンクした回答を誰かが拡張して、VB noobの詳細を提供できることを望んでいると思います。

たとえば、私がこれを持っていたと言う

public class MyClass
    Dim myVar as Integer = 1

    public shared sub UpdateMyVar()
        myVar = 2
    end sub
end class

public class MyOtherClass
    Dim cOne = New MyClass()
    Dim cTwo = New MyClass()

    cOne.UpdateMyVar()
    txtMyTextBox.Text = cTwo.myVar.ToString()
end class

構文上の問題はご容赦ください。このコードがコンパイルされると仮定します。私は文字通り1時間半前にコードをスキミングし始めました。

cTwo.myVar be 1または2?私は推測しています2Sharedはクラスのすべてのインスタンスに影響を与えるように見えるので?それは非常に危険なようです。

13
sab669

C#Staticmethod修飾子に相当するものは、VB.netのSharedです。

VB.NetのC#Staticclass修飾子に最も近いものはModuleです。

VB.NETのStaticキーワードは、プロセスの存続期間中に存在するローカル変数を定義します。 C#にはこれに相当するものはありません。

2つの比較の優れたリファレンスについては、次のリンクを参照してください: https://www.harding.edu/fmccown/vbnet_csharp_comparison.html

21
Matt Wilko

VB.Netの場合、StaticがC#で使用されるのとまったく同じように共有を使用しますが、VB.Netにもstaticキーワードがあり、メソッド呼び出しが終了した後でも変数値を保持するために使用されます。したがって、次にメソッドを呼び出すと、その前の値が使用されます。 MSDNの詳細な説明はここにあります- http://msdn.Microsoft.com/en-us/library/z2cty7t8.aspx

リンクから、いくつかの興味深い動作があります。

Sharedプロシージャで静的変数を宣言すると、アプリケーション全体で使用できる静的変数のコピーは1つだけになります。共有プロシージャは、クラスのインスタンスを指す変数ではなく、クラス名を使用して呼び出します。

Sharedではないプロシージャで静的変数を宣言すると、クラスのインスタンスごとに変数のコピーを1つだけ使用できます。クラスの特定のインスタンスを指す変数を使用して、非共有プロシージャを呼び出します。

2
Wade73