一个例子值得一千个愚蠢的问题:
public class OuterClass
{
public static class InnerClassEventArgs : EventArgs
{
public static int SomeInt;
}
}
并且在遥远的星系中:
public void SomeFunkyFunc()
{
OuterClass Instance1;
OuterClass Instance2;
Instance1.InnerClassEventArgs.SomeInt = 1;
Instance2.InnerClassEventArgs.SomeInt = 2;
//WHAT WOULD Instance1.InnerClassEventArgs.Someint == ?
}
是的,我现在意识到我输入了这个,我几乎编码了所有我需要回答我自己的问题。我宁愿不创建一个新项目,如果比我聪明的人知道他们的头脑,那就不会遇到麻烦。
答案 0 :(得分:3)
Instance1.InnerClassEventArgs.SomeInt
等于2.静态字段在课程的所有实例中共享 - 或as MSDN puts it:
静态成员始终由类名访问,而不是实例名。无论创建了多少个类实例,都只存在一个静态成员的副本。
请注意,您的特定示例将无法编译 - 您将收到一条错误消息,指出“无法在非静态上下文中访问静态类'InnerClassEventArgs'。”
您必须使用以下代码,这有望使行为更容易理解:
OuterClass.InnerClassEventArgs.SomeInt = 1;
OuterClass.InnerClassEventArgs.SomeInt = 2;
答案 1 :(得分:0)
静态类只有一个实例,它的所有用法“共享”(在你的例子中,是所有OuterClass的实例)。因此,该对象的状态将是任何用法所做的所有更改的总和。在这个简单的示例中,SomeInt将为2,无论您使用哪个OuterClass实例再次访问它(Instance1或Instance2)。
我方便地忽略了以下所有内容: