静态方法调用
每个静态调用都会启动一个新线程吗?静态方法调用
对于例如为:
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类似?
回复您的疑问,关于静态调用:
但我听说每个静态调用 相互独立的,因为是 没有实例,只有静态成员 参与。是这样吗? - 斯里兰卡库马尔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();
}
}
输出将是:除了这个
Creating the global instance of class A....
myName
myAge
,静态方法有从实例方法没有什么区别。
每个静态方法中的变量都有自己的作用域,它们独立于一个方法和另一个方法。
+1为了完整! – pyrocumulus 2009-10-27 08:07:00
不,他们将在同一个线程
号静态方法是像任何其他方法,对连续运行,除非你在不同的线程,他们将在从中援引同一个线程中运行调用它们。
这真的取决于你在哪里调用。静态方法本身不会创建任何线程并在其中运行。
静态方法是一种没有任何类关联的方法。这意味着调用一个静态方法不需要经过任何间接方法,而不像一个基于被调用对象解析的虚拟方法。
所有的方法都会在调用方法的线程上运行,无论是虚拟的还是静态的。如果你想要一个方法在不同的线程上运行,请使用线程池或其他技术。
一两件事:
我听说每个静态调用是相互独立
的静态方法调用的并不是真正的独立。
静态方法仍然可以访问同一个类中的其他静态字段和属性,或公开可见的静态字段和其他类,这也是全球性和您的应用程序的生命周期内保留的性质。
正在改变静态字段的状态静态方法是不是“独立的”,如你所说。您可以肯定地说,他们总是在单个实例上调用(始终使用相同的私有数据)。
静态方法的使用与多线程无关。 – okutane 2009-10-27 07:20:46
但我听说每个静态调用是相互独立的,因为没有实例并且只涉及静态成员。是这样吗? – 2009-10-27 07:22:20