2012-06-21 97 views
2

请考虑下面的代码:变量在静态类中的静态方法

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

是否temp变量例如每到MyMethod任何电话?或者因为它是静态类中的一个静态方法,只有一个temp变量在内存中分配的实例?

感谢

回答

7

temp既不是静态的,也不是一个实例变量,它是一个本地变量。声明它的方法是否为静态无关紧要:变量的作用域从其声明的开始处开始,并在声明范围的结束大括号}处结束。通过MyMethod的每个正在执行的线程都获取自己的temp副本,该变量在变量范围之外的任何地方都是不可见的。

+0

感谢亲爱的朋友。你的意思是,如果我把'SqlConnection'放在那个方法里面,打开并关闭它,那个连接会在每个线程中打开和关闭,并且每个线程都不会影响其他线程的连接? – Arian

+0

@Kerezo是的,这是绝对正确的:每个正在执行的线程都会得到自己的变量,无论有多少个线程同时执行。 – dasblinkenlight

4

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

如果您的意思是“每次拨打电话MyMethod都得到单独的temp变量吗?”那么答案是肯定的。

事实上,它是一个静态类中的静态方法是无关紧要的 - 它是一个局部变量,所以每次调用时都会得到一个“新”局部变量。

+0

你说过这样的事实,它是一个静态类中的静态方法是无关紧要的,但在扩展方法中,我们这样做 – Arian

+2

@Kerezo:“我们这样做”是什么意思?即使在扩展方法中,局部变量仍然是局部变量...... –

0

temp每次调用一个实例。

顺便说一句我缺少在静态方法中定义静态局部变量的可能性,就像在C++中一样。

0

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