C# 调用静态嵌套(深度>=2)方法

C# 调用静态嵌套(深度>=2)方法,c#,.net,C#,.net,我已经写了一个小代码 class Program { static void Main() { Nested.Nested2.DoSomething(); } class Nested { public class Nested2 { public static void DoSomething() { } } } } 有一个嵌套类的

我已经写了一个小代码

class Program
{
    static void Main()
    {
        Nested.Nested2.DoSomething();
    }

    class Nested
    {
        public class Nested2
        {
            public static void DoSomething()
            { }
        }
    }
}
有一个嵌套类的类程序。嵌套类也有嵌套类-嵌套2和静态方法DoSomething

大体上我称之为DoSomething

我的问题是:为什么我可以在Main中调用这个方法。我知道这个方法是静态的,如果这个方法在嵌套类而不是嵌套2中,我可以调用它。为什么我不需要创建嵌套的实例,然后像这样调用此方法:

Nested nested = new Nested();
nested.Nested2.DoSomething();
如果Nested2不是静态的,为什么我可以访问Nested2 Nested.Nested2而不创建Nested的实例


提前感谢。

内部类的完整名称实际上是Nested.Nested2。在这种情况下,Nested既不引用嵌套类的实际实例,也不引用任何静态成员,但可以视为命名空间

这同样也适用于嵌套,在程序类之外时,实际上称为Program.Nested。因此,创建实例需要假定嵌套是公共的,而在您的案例中不是这样的:

var instance = new Program.Nested();
或者对于程序中的Nested2类:

或者对于Nested2类,从外部程序:


这与您的成员或静态类无关,而是与类的实际名称有关。

内部类的完整名称实际上是嵌套的。Nested2。在这种情况下,Nested既不引用嵌套类的实际实例,也不引用任何静态成员,但可以视为命名空间

这同样也适用于嵌套,在程序类之外时,实际上称为Program.Nested。因此,创建实例需要假定嵌套是公共的,而在您的案例中不是这样的:

var instance = new Program.Nested();
或者对于程序中的Nested2类:

或者对于Nested2类,从外部程序:


这与您的成员或静态类无关,而是与类的实际名称有关。

您可以在非静态类上调用静态方法。我不知道如果你将它嵌套在另一个类中,为什么你会期望它改变。你不需要实例来访问静态成员。它是一个静态方法,为什么你需要实例?Nested.Nested2是类的名称。DoSomething是嵌套方法的名称,您可以在非静态类上调用静态方法。我不知道如果你将它嵌套在另一个类中,为什么你会期望它改变。你不需要实例来访问静态成员。它是一个静态方法,为什么你需要实例?Nested.Nested2是类的名称。DoSomething是嵌套方法的名称谢谢,我误解了nested.Nested2语句。我考虑过嵌套,但它是关于类名的。现在我明白了。非常感谢。这行不通:var instance=new Program.Nested;因为Nested不是公共的,所以你是对的。我希望读者无论如何都能得到我想要的。谢谢,我误解了Nested.Nested2的说法。我考虑过嵌套,但它是关于类名的。现在我明白了。非常感谢。这行不通:var instance=new Program.Nested;因为Nested不是公共的,所以你是对的。我希望读者无论如何都能得到我想要的东西。
var instance = new Program.Nested.Nested2();