默认和自定义构造函数

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",它可能只是保留在堆栈上。