1

如果类中的方法具有const变量,例如:

public void MyMethod()
{
   const int myVariable = 5;

   // blah
}

只会myVariable被初始化一次(当我相信第一次调用该方法时)或每次调用该方法时?

4

2 回答 2

11

两者都不。绝不。常量主要在编译时使用。它不是变量也不是字段。文字值 5 将被使用常量(“ldc.i4.5”)的任何代码使用 - 但在运行时不需要常量本身。

于 2013-06-08T21:09:59.533 回答
3

绝不。将会发生的事情是编译器会将那个变量烧入方法中:就好像它从未存在过一样,只需将值放在您放置 const 名称的位置。

例如

public double MyMethod()
{
    const int anInt = 45;
    return anInt * (1/2.0) + anInt;
}

将被编译为:

public double MyMethod()
{
    return 45 * (1/2.0) + anInt; 
    //actually that would also be calculated at compile time,
    //but that's another implementation detail.
}
于 2013-06-08T21:14:34.303 回答