1

異なるクラスの異なるオブジェクトが、それらの間で1つの共有アイテムを使用できる可能性がありますか(たとえば、オンザフライで情報を提供するため)、または2つの異なるクラスの異なるオブジェクト間の通信手段を改善できますか?

Class Base 
{
   public static string SomeThing = "Shared With All";
}
Class Der1 :Base
{
     public void DoSomeThing()
     {
          SomeThing = "SomeThing Goes in here...";
     }
}

Class Der2 :Base
{
     public void DoSomeThingElse()
     {
          Console.WriteLine"(SomeThing);
     }
}

....
{
    Der1 dr1 = new Der1();
    dr1.DoSomeThing();  
    Der2 dr2 = new Der2();
    dr2.DoSomeThingElse(); //shows 'SomeThing Goes in here...'  
}

それがもっと役立つなら、私はある種のデザイナーを作成しようとしているので、デザイナー上のすべてのコントロールとそれらの関連付けを追跡する必要があります。実際には、現時点ではオブジェクトは2つしかありません(1つはトランザクションと呼ばれ、もう1つは場所と呼ばれ、異なる場所を異なるトランザクションに関連付けることができます。この関連付けは、ユーザーが1つの場所をクリックして、他のトランザクションをポイントすることによって行われます(見Proteusた?そのようなもの)。

したがって、このアプローチは、どのオブジェクトが他のどのオブジェクトを参照しているかを知るのに役立ち、したがって、2つの間の関連付けを簡単に見つけて保存することができます。

4

5 に答える 5

5

static フィールドは、通常のフィールドと同じように実際には継承されません。静的フィールドはまだ1 つBase.SomeThingだけです。両方の派生クラスが同じフィールドを参照しています。何かが変更された場合Base.SomeThing、そのフィールドにアクセスするすべてのものに変更が表示されます。

于 2013-03-18T18:36:26.947 に答える
1

静的フィールドは、それを宣言するクラスに属します。そのクラスのすべてのサブクラスは、その1つの静的フィールドにアクセスできます。

ここにはいくつかの注意点があります。ジェネリッククラスで静的変数を宣言するということは、そのジェネリックの閉じた型ごとにその変数のコピーが1つ存在することを意味します。明確にするための例を次に示します

public class StaticGenericTest<T>
{
  private static int count=0;
  public StaticGenericTest()
  {
     count++;
  }
}

StaticGenericTest<int>aとaをインスタンス化すると、StaticGenericTest<string>カウントの値が異なります。ただし、のサブクラスは、StaticGenericTest<int>の他のすべてのサブクラスとカウントを共有しますStaticGenericTest<int>

ThreadStaticまた、属性(スレッドごとにcountのコピーを1つ取得するため)や静的コンストラクターを使用すると、おかしな動作が発生します。

誰かが述べたように、静的フィールドはグローバル状態であり、そのように保護し、注意して使用する必要があります。

于 2013-03-18T18:47:47.283 に答える
1

可能ですが、クラス内でのこのようなコミュニケーションについてはよく考えてください。値が複数の場所に設定されている場合、並行性の問題を説明する適切な方法はなく、デバッグが非常に困難です。

于 2013-03-18T18:37:37.257 に答える
1

varを使用するか、 andstaticを使用して共有することができます。これらは OOP の基本的な演算子です。settergetter

于 2013-03-18T18:38:12.993 に答える
1

ええ、あなたはグローバル変数を発明しました :) また、ほとんどの場合、これは設計が悪いことを示しています。タスクを別の方法で解決してみてください。

于 2013-03-18T18:36:47.087 に答える