静态方法调用

Gop*_*opi 1 c# static-members

每个静态调用都会启动一个新线程吗?

对于Eg:

class A
{
    public static void displayName()
    {
        Console.WriteLine("myName");
    }

    public static void displayAge()
    {
        Console.WriteLine("myAge");
    }
}


class B
{
    public void Foo()
    {
        A.displayName();
        A.displayAge();           
    }
} 
Run Code Online (Sandbox Code Playgroud)

上述调用是否会相互独立?如果是,那么它是否类似于线程?

SiL*_*oNG 10

回复您对静态电话的疑问:

但我听说每个静态调用都是相互独立的,因为没有实例,只涉及静态成员.是这样吗? - Sri Kumar 36分钟前

您可以认为您的类有一个"全局"实例,所有静态方法都由此实例保存.

在您的示例中,您可以通过调用创建"用户"实例ClassA myA = new ClassA().同时,将有一个"全局"实例,它由运行时创建但对您来说是不可见的,静态方法驻留在此实例中.静态方法行为作为此"全局"实例中的实例方法.

令人惊讶的是,在C#中有一个静态构造函数,当运行时初始化'global'实例时将调用它.

你可以测试这段代码:

class A
{
    static A() {
       Console.WriteLine("Creating the global instance of class A....");
    }

    public static void displayName()
    {
        Console.WriteLine("myName");
    }

    public static void displayAge()
    {
        Console.WriteLine("myAge");
    }
}


class B
{
    public void Foo()
    {
        A.displayName();
        A.displayAge();           
    }
}
Run Code Online (Sandbox Code Playgroud)

输出将是:

Creating the global instance of class A....
myName
myAge
Run Code Online (Sandbox Code Playgroud)

除此之外,静态方法与实例方法没有任何区别.

每个静态方法中的变量都有自己的范围,它们独立于一个方法到另一个方法.