Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 静态方法调用_C#_Static Members - Fatal编程技术网

C# 静态方法调用

C# 静态方法调用,c#,static-members,C#,Static Members,每个静态调用是否会启动一个新线程 例如: class A { public static void displayName() { Console.WriteLine("myName"); } public static void displayAge() { Console.WriteLine("myAge"); } } class B { public void Foo() {

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

例如:

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

上述通话是否相互独立运行?如果是,那么它与线程类似吗?

否它们将在同一线程上顺序运行

否它们将在同一线程上顺序运行

否。静态方法与任何其他方法类似,除非您在不同的线程中调用它们,否则它们将在您从中调用的同一线程中运行


这真的取决于你在哪里调用。静态方法本身不会创建任何线程并在其中运行。

否。静态方法与任何其他方法一样,除非您在不同的线程中调用它们,否则它们将在您从中调用的同一线程中运行


这真的取决于你在哪里调用。静态方法本身不会创建任何线程并在其中运行。

回答您对静态调用的疑问:


但我听说每个静态呼叫都是 相互独立 没有实例,只有静态成员 都涉及到了。是这样吗?——斯里兰卡库马尔36 几分钟前

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

在您的示例中,您可以通过调用
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
除此之外,静态方法与实例方法没有什么区别


每个静态方法中的变量都有自己的作用域,并且它们独立于不同的方法。

回答您对静态调用的疑问:


但我听说每个静态呼叫都是 相互独立 没有实例,只有静态成员 都涉及到了。是这样吗?——斯里兰卡库马尔36 几分钟前

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

在您的示例中,您可以通过调用
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
除此之外,静态方法与实例方法没有什么区别


每个静态方法中的变量都有自己的作用域,并且它们独立于一个方法到另一个方法。

静态方法是一种没有任何类与其关联的方法。这意味着调用静态方法不必经过任何间接过程,这与虚拟方法不同,虚拟方法是基于调用它的对象进行解析的


所有方法都将在调用方法的线程上运行,无论是虚拟的还是静态的。如果希望方法在不同的线程上运行,请使用线程池或其他技术。

静态方法是一种没有任何类与其关联的方法。这意味着调用静态方法不必经过任何间接过程,这与虚拟方法不同,虚拟方法是基于调用它的对象进行解析的

所有方法都将在调用方法的线程上运行,无论是虚拟的还是静态的。如果要在不同的线程上运行方法,请使用线程池或其他技术。

还有一件事:

我听说每个静态调用都是相互独立的

静态方法调用并不是真正独立的

静态方法仍然可以访问同一类中的其他静态字段和属性,或其他类的公共可见静态字段和属性,这些字段和属性也是全局的,并在应用程序的生命周期内保留

正如您所建议的,改变静态字段状态的静态方法不是“独立的”。唯一可以确定的是,它们总是在单个实例上被调用(总是使用相同的私有数据)。

还有一件事:

我听说每个静态调用都是相互独立的

静态方法调用并不是真正独立的

静态方法仍然可以访问同一类中的其他静态字段和属性,或其他类的公共可见静态字段和属性,这些字段和属性也是全局的,并在应用程序的生命周期内保留


正如您所建议的,改变静态字段状态的静态方法不是“独立的”。唯一可以确定的是,它们总是在单个实例上调用(总是使用相同的私有数据)。

静态方法的使用与多线程绝对无关。但我听说每个静态调用都是相互独立的,因为没有实例,只涉及静态成员。是吗?静态方法的使用与多线程绝对无关。但我听说每个静态调用都是相互独立的,因为没有实例,只涉及静态成员。是这样吗?