C# 默认和自定义构造函数

C# 默认和自定义构造函数,c#,default-constructor,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)

我有一个简单的问题

假设我有下面这样的课

    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)初始化字段,或者用空体初始化默认构造函数


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

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

此处记录了以下内容:

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

您不需要一个空的无参数构造函数来实现这一点。如果您真的想调用该构造函数,并且对该类型有意义,则只需添加该构造函数

还请注意,同时声明初始化表达式的任何字段声明都会提升到构造函数中

如果您这样做:

public TDValue type = new TDValue();
然后,不管调用哪个构造函数,该字段都将有一个对新
TDValue
对象的实例引用



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

字段根据默认值初始化为默认值,因此您不需要,但我必须有这个空构造函数是吗?@Filus1025除非您没有其他构造函数,是,你必须陈述它。
TDValue
是你唯一需要担心的事情。做一个字段初始化怎么样?当你有一个带参数的构造函数时就足够了,不需要无参数的构造函数。您的所有值都初始化为默认值(对于
TDValue
,为空)。