1)为什么必须在编译时确定字段成员的初始化值?
2)但是如果需要在编译时确定初始化值,那么为什么我能够使用对象的引用来初始化A.b
字段:
class A
{
B b = new B();
}
class B {}
谢谢
答案 0 :(得分:1)
我想知道你是否在讨论方法中变量的“明确赋值”;即。
void Foo() {
int i;
Console.WriteLine(i); // not valid; i not assigned
i = 1;
Console.WriteLine(i); // would be value
}
这样,对于方法变量,值永远不会受到从堆栈中拾取的随机值的影响。实际上,有一个IL标记意味着本地人被擦除 - 而IIRC C#编译器包括这个标记无论如何 ...但语言规范说方法变量必须肯定是分配
对于您的示例,该字段初始化本质上成为公共构造函数代码的一部分。但你永远不会注意到它。
答案 1 :(得分:1)
1)为什么必须在编译时确定字段成员的初始化值?
绝对不能。你为什么这么想?
答案 2 :(得分:1)
如果您的意思是本书Illustrated C# 2008的这一部分,那么它就在讨论const
字段的部分。编译器可以使用const字段的值替换const字段的使用,因此字段的初始化程序必须是常量。
原始帖子中的字段不是const。因此限制不适用于此。