C# 静态类中的静态方法中的变量 请考虑此代码: 1)public static class MyClass 2){ 3) public static DateTime MyMethod(DateTime dt) 4) { 5) DateTime temp = new DateTime(); 6) temp = dt.AddDays(1); 7) return temp; 8) } 9)}

C# 静态类中的静态方法中的变量 请考虑此代码: 1)public static class MyClass 2){ 3) public static DateTime MyMethod(DateTime dt) 4) { 5) DateTime temp = new DateTime(); 6) temp = dt.AddDays(1); 7) return temp; 8) } 9)},c#,.net,oop,c#-4.0,static,C#,.net,Oop,C# 4.0,Static,temp变量在调用MyMethod时是否具有实例?或者因为它在静态类中的静态方法中,所以在内存中只分配temp变量的一个实例 感谢temp既不是静态变量,也不是实例变量,而是局部变量。声明它的方法是静态的与否完全无关:变量的作用域从声明点开始,到声明它的作用域的右大括号}结束。通过MyMethod的每个执行线程都会获得自己的temp副本,该副本在变量范围之外的任何地方都不可见 temp变量是否在每次调用MyMethod时都有实例 如果您的意思是“是否每次调用MyMethod都会获得一个单独的te

temp
变量在调用
MyMethod
时是否具有实例?或者因为它在静态类中的静态方法中,所以在内存中只分配
temp
变量的一个实例


感谢

temp
既不是静态变量,也不是实例变量,而是局部变量。声明它的方法是静态的与否完全无关:变量的作用域从声明点开始,到声明它的作用域的右大括号
}
结束。通过
MyMethod
的每个执行线程都会获得自己的
temp
副本,该副本在变量范围之外的任何地方都不可见

temp变量是否在每次调用MyMethod时都有实例

如果您的意思是“是否每次调用
MyMethod
都会获得一个单独的
temp
变量?”那么答案是肯定的


它是静态类中的静态方法这一事实是不相关的——它是一个局部变量,因此每次调用都会得到一个“新”的局部变量。

temp
每次调用都有一个实例


BTW,我不太可能在静态方法中定义静态局部变量,如C++中。

< P>,即使在静态方法中,临时变量也必须声明为静态的,否则它只是在该实例中本地创建的,然后在方法调用结束时被吹走。

您说的
在静态类中它是静态方法这一事实是不相关的
,但在扩展方法中我们会这样做this@Kerezo:你说的“我们这样做”是什么意思?即使在扩展方法中,局部变量仍然是局部变量…谢谢亲爱的朋友。你的意思是如果我将
SqlConnection
放在该方法中并打开和关闭它,那么连接将在每个线程中打开和关闭,而每个线程都不会影响其他线程的连接吗?@Kerezo Yes,这是绝对正确的:每个执行线程都有自己的变量,不管有多少线程同时执行。