我有一个简单的问题。
假设我有类似下面的课程。
public class DamageToDeal
{
public bool enabled;
public float value;
public TDValue type;
public DamageToDeal() { }
public DamageToDeal(bool _enabled, float _value, TDValue _type)
{
enabled = _enabled;
value = _value;
type = _type;
}
}
我读过如果我有自定义构造函数,则默认不是自动生成的
我是否必须使用默认值(0,null)自己初始化字段,或者使用空主体的默认构造函数仍然可以执行此操作?
或者,如果默认构造函数正在初始化字段,即使他有空体?
答案 0 :(得分:2)
内存分配器清除分配给新类实例的内存。您只需确保分配了您想要具有非默认值的任何字段。
此处记录在案:Fundamentals of Garbage Collection:
托管对象自动获得干净的内容,因此他们的构造函数不必初始化每个数据字段。
为此,您不需要空的无参数构造函数。如果你真的想要调用它,那么你只会添加那个构造函数。这对于类型是有意义的。
另请注意,任何声明初始化表达式的字段声明都会被提升为构造函数。
如果你这样做:
public TDValue type = new TDValue();
然后,无论调用哪个构造函数,该字段都将具有对新TDValue
对象的实例引用。
请注意,上述内容适用于类,而不适用于结构。对于结构,您需要确保分配所有字段,因为内存并不总是"已分配",它可能只是保留在堆栈上。