类型声明隐式是静态成员

Wat*_* v2 6 c#

我认识的人刚刚让我从MSDN解释这个声明,我傻眼了.

常量或类型声明隐式地是静态成员.

那个短语"或者类型声明是隐含的静态成员",对我来说没有意义.

那是什么意思?

Avi*_*ner 4

对我来说这是有道理的type declaration is implicitly a static member
因为如果你有课:

class Foo
{
   public class Bar
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

无法通过以下方式访问该课程Bar

Foo f = new Foo();
Bar b =new f.Bar();
Run Code Online (Sandbox Code Playgroud)

(我什至不知道如何写才能使其有意义)。
如果你想访问Bar类,你需要执行以下操作:

Bar b = new Foo.Bar()
Run Code Online (Sandbox Code Playgroud)

您可以通过类而不是实例来访问它。因此
Bar是 的静态成员Foo

  • 之所以出现在语言规范#中,是因为它与 java 不同。在这个答案中,第一种通过类实例访问嵌套类的方法是可能的,并且如果没有父实例,则无法实例化嵌套类。在java中,每个嵌套类都将父实例的引用保留为闭包。C# 中的其他地方可以在没有父实例的情况下创建嵌套类。这是一个重大的设计决策,因为它改变了程序员使用它的方式。强加这种设计的不是 .net 框架,而是 C#。您可以创建自己的语言并支持 java 类型的嵌套类。 (2认同)