constant and readonly in c#?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What is the difference between const and readonly?
我在C中有疑问,常数和只读的区别是什么,用简单的问题或任何参考来解释。
1 2 3 4 5 | class Foo { int makeSix() { return 2 * 3; } const int const_six = makeSix(); // <--- does not compile: not initialised to a constant readonly int readonly_six = makeSix(); // compiles fine } |
另一方面,
但是要小心:只读集合或对象字段的内容仍然可以更改,而不是设置的集合的标识。这是完全有效的:
1 2 3 4 5 6 7 | class Foo { readonly List<string> canStillAddStrings = new List<string>(); void AddString(string toAdd) { canStillAddStrings.Add(toAdd); } } |
但在这种情况下,我们无法替换参考文献:
1 2 3 4 5 6 7 | class Foo { readonly List<string> canStillAddStrings = new List<string>(); void SetStrings(List<string> newList) { canStillAddStrings = newList; // <--- does not compile, assignment to readonly field } } |
常量(
因为const值是在编译时计算的,如果在assembly2中定义的assembly1中使用const,则需要再次编译assembly1,以防const值更改。这不会发生在只读字段中,因为Evaluarion处于运行时。
consast在运行时初始化,可以用作静态成员。只读在运行时只能初始化一次。
谷歌,有人吗?
- http://blogs.msdn.com/csharpfaq/archive/2004/12/03/274791.aspx
- http://www.c-sharpcorner.com/uploadfile/sayginteh/constandardoronly1112005005151am/constandardoronly.aspx
- http://weblogs.asp.net/psteele/archive/2004/01/27/63416.aspx
在C中,常量成员必须在编译时被赋值。但可以在运行时初始化一次只读成员。