枚举与常量需要注意的一个问题
时间:2010-10-27 来源:小小娟
下面是一个例子:
我们想建立一个类库项目,名称叫A,再建立一个控制台项目,名称叫Test,结构如下:
A项目中的 MyClass.cs的代码:
public class MyClass { public static string str1="str1"; public const string str2="str2"; } public enum MyEnum { One=1, Two=2, Three=3 }
定义了一个枚举以及一个静态字段、一个常量字段。
Test项目引用A项目,代码如下:
class Program { static void Main(string[] args) { Console.WriteLine((int)MyEnum.One); Console.WriteLine(MyEnum.One.ToString()); Console.WriteLine(MyClass.str1); Console.WriteLine(MyClass.str2); } }
我们来看看Program类用Reflector工具反编译后的样子:
private static void Main(string[] args) { Console.WriteLine(1); Console.WriteLine(MyEnum.One.ToString()); Console.WriteLine(MyClass.str1); Console.WriteLine("str2"); }
编译器将(int)MyEnum.One的值与常量字段str2直接硬编码写到代码中,而不是在运行期再去读取。
这样处理的后果是:如果你修改了A项目中的枚举的排列顺序或者枚举对应的值(或者改变了常量字段str2的值),比如将MyEnum.One的值2,同时不重新编译Test项目,那样运行结果还是不会变的。
相关阅读 更多 +