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在内存中分配了一个变量实例?

谢谢

4

4 回答 4

7

temp既不是静态变量也不是实例变量,它是局部变量。声明它的方法是否是静态的绝对无关紧要:变量的范围从其声明点开始,到声明它}的范围的右花括号结束。通过的每个执行线程MyMethod都有自己的副本temp,该副本在变量范围之外的任何地方都是不可见的。

于 2012-06-21T20:13:57.913 回答
4

对于 MyMethod 的任何调用,临时变量是否都有实例?

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

它是静态类中的静态方法这一事实无关紧要 - 它是一个局部变量,因此每次调用都会获得一个“新”局部变量。

于 2012-06-21T20:13:59.467 回答
0

temp每次调用有一个实例。

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

于 2012-06-21T20:14:20.223 回答
0

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

于 2012-06-21T20:15:28.720 回答