2010-06-27 24 views
12

这里是一个无意义的扩展方法作为示例:线程和静态方法在C#

public static class MyExtensions 
{ 
    public static int MyExtensionMethod(this MyType e) 
    { 
     int x = 1; 
     x = 2; 

     return x 
    } 
} 

假设执行的线程高达完成并包括线:

x = 2; 

然后处理器上下文切换并且另一个线程进入相同的方法并完成该行:

int x = 1; 

我是否正确ct假设由第一个线程创建和分配的变量“x”在第二个创建和分配的变量“x”的独立堆栈上,意味着此方法是可重入的?

回答

14

是的,每个线程都有自己独立的局部变量。即使被多个线程同时调用,该函数也会始终返回2。

2

是的,这是一个正确的评估。 x是方法局部变量,不会在调用MyExtensionMethod之间共享。

0

很简单,是的。静态方法仅意味着可以在没有对象的情况下调用该方法。方法内的局部变量仍然是本地的。