初始化成员变量时使用默认关键字是一个坏主意吗?
本文关键字:一个 变量 成员 关键字 默认 初始化 | 更新日期: 2023-09-27 18:34:52
从历史上讲,我在赋值之前初始化了成员变量,如下所示:
private bool _myBool = false;
private int _myInt = int.MinValue;
private string _myString = String.Empty;
最近我发现自己像这样初始化它们(通常使用原语(:
private DateTime _myDateTime = default(DateTime);
private bool _myBool = default(bool);
//etc
这是坏做法还是好做法? 怎么来了?
我真的看不出这样做有什么意义,因为您正在添加实际上什么都不做的额外代码。
如果您尝试默认(类(,则同样适用,您将获得空值。
private int _myInt = int.MinValue;
和default(int)
是不同的。
这完全取决于您的要求。如果您希望变量具有值,那么使用 default
的 IMO 更具可读性和清晰度。
它只对函数的本地变量很重要,对于类字段,它将由编译器完成。
添加
指示编译器执行它将要执行的操作的语句是一种不好的做法(这也适用于bool _myBool = false
,尽管程度较小(。
与必须显式分配的局部变量不同,字段隐式初始化为其默认值。编译器已经知道这样做,因此附加代码绝对不适合编译器。
由于代码的唯一其他"使用者"是读者,因此问题归结为"期望读者知道类中的字段初始化为其默认值是否合理?我认为答案应该是"是",因为这是非常基本的知识。
初始化要default(T)
的字段没有价值,因为这是由编译器"默认"完成的。
之前设置,则值会更小:
public void Foo(){
DataSet ds = null;
ds = new DataSet();
}
为什么要在设置之前清除它?
从某种意义上说,它增加了代码读者的认知负荷,这种做法许多人认为这种做法是有害的。如果我看到初始化,我希望它能提供一些真正的意义。default
关键字的主要用途是泛型。