1

一个例子值得一千个愚蠢的问题,所以:

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 == ?
}

是的,我现在意识到我已经输入了几乎所有我需要回答我自己的问题的代码。如果比我聪明的人知道他们的头脑,我宁愿不创建一个新项目并经历麻烦。

4

2 回答 2

3

Instance1.InnerClassEventArgs.SomeInt将等于 2。静态字段在类的所有实例之间共享——或者如 MSDN 所说

静态成员总是由类名访问,而不是实例名。无论创建了多少个类实例,都只存在一个静态成员的副本。

请注意,您的特定示例无法编译 - 您将收到一条错误消息,显示“无法在非静态上下文中访问静态类 'InnerClassEventArgs'”。

您必须改用以下代码,这有望使行为更易于理解:

OuterClass.InnerClassEventArgs.SomeInt = 1;
OuterClass.InnerClassEventArgs.SomeInt = 2;
于 2012-11-29T20:04:34.777 回答
0

静态类只有一个实例,由其所有用法“共享”(在您的情况下,是 OuterClass 的所有实例)。因此,该对象的状态将是任何使用所做的所有更改的总和。在这个简单的示例中,SomeInt 将为 2,无论您使用哪个 OuterClass 实例再次访问它(Instance1 或 Instance2)。

我很方便地忽略了以下所有内容:

  • 静态类不能从任何其他类继承。因此,InnerClassEventArgs 不能从 EventArgs 继承。
  • Instance1 和 Instance2 未初始化;如果您使用 ReSharper,这将导致其自身的编译时错误(“X 在访问之前可能未初始化”)。
  • 不能基于任何一个实例访问静态成员(包括嵌套的静态类);您将在静态上下文中访问 InnerClassEventArgs。
于 2012-11-29T20:06:35.613 回答