请考虑以下代码:
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
变量的实例在内存中分配?
感谢
答案 0 :(得分:7)
temp
既不是静态变量也不是实例变量,它是 local 变量。声明它的方法是否为静态绝对无关紧要:变量的范围从其声明点开始,并以声明它的范围的结束大括号}
结束。通过MyMethod
的每个执行线程都会获得自己的temp
副本,该副本在变量范围之外的任何位置都是不可见的。
答案 1 :(得分:4)
对于每次调用MyMethod,temp变量都有实例吗?
如果您的意思是“对MyMethod
的每次通话都会获得单独的temp
变量吗?”然后答案是肯定的。
它是静态类中的静态方法这一事实无关紧要 - 它是一个局部变量,因此每次调用都会得到一个“新的”局部变量。
答案 2 :(得分:0)
temp
每次调用都有一个实例。
顺便说一句,我不太可能像在C ++中那样在静态方法中定义静态局部变量。
答案 3 :(得分:0)
即使在静态方法中,临时变量也必须声明为静态变量,否则它只是在该实例中本地创建,然后在方法调用结束时被吹走。