我写了一个小代码.
class Program { static void Main() { Nested.Nested2.DoSomething(); } class Nested { public class Nested2 { public static void DoSomething() { } } } }
有类Program
有嵌套类Nested
.类Nested
也有嵌套类 - Nested2
使用静态方法DoSomething()
.
在Main
我打电话DoSomething()
.
我的问题:为什么我可以调用这种方法Main
.我知道这个方法是static
,如果这个方法在Nested
class(不是Nested2
)里面,我可以调用它.为什么我不需要创建实例,Nested
然后像这样调用此方法:
Nested nested = new Nested(); nested.Nested2.DoSomething();
为什么我可以访问Nested2
(Nested.Nested2
),而无需创建的实例Nested
,如果Nested2
不static
.
提前致谢.
实际上,你的内部类的完整名称Nested.Nested2
.在这种情况下Nested
,不是指类的实际实例,Nested
也不是指任何静态成员,但可以将其视为命名空间.
这同样适用于Nested
,Program.Nested
在你的Program
类之外实际调用.因此创建实例(假设Nested
是public
,在您的情况下不是这样):
var instance = new Program.Nested();
或者对于你的Nested2
-class Program
:
var instance = new Nested.Nested2();
或者Nested2
来自外面的你的类Program
:
var instance = new Program.Nested.Nested2();
这与你的成员没有任何关系,也没有与静态类相关的类,而是与类的实际名称有关.