默认和自定义构造函数
Default and custom constructor
我有一个简单的问题。
假设我有如下 class。
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)初始化字段,或者带有空主体的默认构造函数无论如何都会这样做?
或者如果默认构造函数正在初始化字段,即使他有空主体?
内存分配器清除了分配给新 class 实例的内存。您只需确保为您希望具有非默认值的任何字段分配。
此处记录:Fundamentals of Garbage Collection:
Managed objects automatically get clean content to start with, so their constructors do not have to initialize every data field.
您不需要一个空的无参数构造函数来实现这一点。如果你真的想调用它并且这对类型有意义,你只会添加该构造函数。
另请注意,任何声明初始化表达式的字段声明都被提升到构造函数中。
如果你这样做:
public TDValue type = new TDValue();
那么无论调用哪个构造函数,该字段都将具有对新 TDValue
对象的实例引用。
请注意,以上内容适用于 classes,不适用于结构。对于结构,您需要确保分配所有字段,因为内存并不总是 "allocated",它可能只是保留在堆栈上。
我有一个简单的问题。
假设我有如下 class。
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)初始化字段,或者带有空主体的默认构造函数无论如何都会这样做?
或者如果默认构造函数正在初始化字段,即使他有空主体?
内存分配器清除了分配给新 class 实例的内存。您只需确保为您希望具有非默认值的任何字段分配。
此处记录:Fundamentals of Garbage Collection:
Managed objects automatically get clean content to start with, so their constructors do not have to initialize every data field.
您不需要一个空的无参数构造函数来实现这一点。如果你真的想调用它并且这对类型有意义,你只会添加该构造函数。
另请注意,任何声明初始化表达式的字段声明都被提升到构造函数中。
如果你这样做:
public TDValue type = new TDValue();
那么无论调用哪个构造函数,该字段都将具有对新 TDValue
对象的实例引用。
请注意,以上内容适用于 classes,不适用于结构。对于结构,您需要确保分配所有字段,因为内存并不总是 "allocated",它可能只是保留在堆栈上。