1

不同类的不同对象是否有可能在它们之间使用一个共享项(例如,用于即时提供一些信息)或更好地在两个不同类的不同对象之间进行通信?

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...'  
}

如果它有更多帮助,我正在尝试创建某种设计器,因此我需要跟踪设计器上的所有控件及其关联。实际上现在只有两个对象(一个叫交易,一个叫地点,不同的地点可以关联不同的交易,这种关联是通过用户点击一个地点并指向其他交易完成的(你有没有见过Proteus?类似的东西)。

所以这种方法将帮助我知道哪个对象引用了哪个其他对象,因此可以很容易地发现和保存两者之间的关联。

4

5 回答 5

5

静态字段与普通字段的继承方式不同。仍然只有一个静态场,Base.SomeThing. 您的两个派生类都引用同一个字段:如果有任何更改Base.SomeThing,访问该字段的所有内容都会看到更改。

于 2013-03-18T18:36:26.947 回答
1

是的,你发明了一个全局变量:)它也几乎总是糟糕设计的标志。尝试以不同的方式解决您的任务。

于 2013-03-18T18:36:47.087 回答
1

这是可能的,但请仔细考虑在课堂内以这种方式进行交流。如果值设置在多个位置,则没有很好的方法来解决并发问题并且很难调试。

于 2013-03-18T18:37:37.257 回答
1

您可以使用staticvar 或使用setterand共享内容getter。这些是 OOP 中的基本运算符。

于 2013-03-18T18:38:12.993 回答
1

静态字段属于声明它的类。该类的任何子类都可以访问该静态字段。

这里有一些警告。在泛型类上声明一个静态变量意味着该变量的一个副本存在于该泛型的每个封闭类型。这是一个澄清的例子

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

如果您实例化 aStaticGenericTest<int>和 aStaticGenericTest<string>它们将具有不同的计数值。然而, 的子类StaticGenericTest<int>将与 的所有其他子类共享计数StaticGenericTest<int>

ThreadStatic此外,使用属性(因为您将获得每个线程的一份计数)和/或静态构造函数,您将获得有趣的行为。

正如有人提到的,静态字段是全局状态,应该受到保护并谨慎使用。

于 2013-03-18T18:47:47.283 回答