假设我们有以下使用泛型的
为什么?为什么编译器对它们有不同的处理方式?此外,如果第一个Foo中没有定义构造函数,则可以编译通过。这种行为是为什么?
struct
定义:public struct Foo<T>
{
public T First;
public T Second;
public Foo(T first)
{
this.First = first;
}
}
编译器显示:
在控制权返回给调用者之前,'Foo.Second' 必须完全赋值
然而,如果 Foo
是一个类,则可以成功编译。
public class Foo<T>
{
public T First;
public T Second;
public Foo(T first)
{
this.First = first;
}
}
为什么?为什么编译器对它们有不同的处理方式?此外,如果第一个Foo中没有定义构造函数,则可以编译通过。这种行为是为什么?
public readonly T First; public readonly T Second;
。然后在实例构造函数中自然地分配所有实例字段。另一方面,如果您真的不想分配所有字段,请链接(隐式和神奇的)无参数构造函数,例如:: this()
(但我猜您已经知道了)。 - Jeppe Stig Nielsen