c# - 静态方法调用

标签 c# static-members

是否每次静态调用都会启动一个新线程?

例如:

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();           
    }
} 

上述调用会相互独立运行吗?如果是,那么它是不是类似于Threading?

最佳答案

回复关于静态调用的疑问:

But i heard each static call is independent of each other as there is no instance and only static members are involved. is it so? – Sri Kumar 36 mins ago

你可以认为你的类有一个“全局”实例,所有静态方法都由这个实例持有。

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

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

您可以测试这段代码:

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();           
    }
}

输出将是:

Creating the global instance of class A....
myName
myAge

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

每个静态方法中的变量都有自己的范围,并且它们在一个方法与另一个方法之间是独立的。

关于c# - 静态方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1629184/

相关文章:

c# - Xamarin Android : System. IO.Compression.ZipFile.ExtractToDirectory 在 Release模式下失败

c# - USQL 查询从 Json 数据创建表

c# - Entity Framework "An object with the same key already exists in the ObjectStateManager."- 我无法理解如何从这里开始做什么

java - 为什么Spring强制我使用静态变量?

c++ - 错误 LNK2001 : unresolved external symbol public: static class

c# - 下载 zip + 文件到内存中

c# - 取消 PreviewKeyDown

.net - 静态类是线程安全的吗

c++ - 静态成员类与普通的类 C 接口(interface)

c++ - 对静态 constexpr char[] 的 undefined reference