默认和自定义构造函数

时间:2015-08-07 08:06:19

标签: c# default-constructor

我有一个简单的问题。

假设我有类似下面的课程。

    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)自己初始化字段,或者使用空主体的默认构造函数仍然可以执行此操作?

或者,如果默认构造函数正在初始化字段,即使他有空体?

1 个答案:

答案 0 :(得分:2)

内存分配器清除分配给新类实例的内存。您只需确保分配了您想要具有非默认值的任何字段。

此处记录在案:Fundamentals of Garbage Collection

  

托管对象自动获得干净的内容,因此他们的构造函数不必初始化每个数据字段。

为此,您不需要空的无参数构造函数。如果你真的想要调用它,那么你只会添加那个构造函数。这对于类型是有意义的。

另请注意,任何声明初始化表达式的字段声明都会被提升为构造函数。

如果你这样做:

public TDValue type = new TDValue();

然后,无论调用哪个构造函数,该字段都将具有对新TDValue对象的实例引用。

请注意,上述内容适用于类,而不适用于结构。对于结构,您需要确保分配所有字段,因为内存并不总是"已分配",它可能只是保留在堆栈上。