对象初始化可以确定成员是否为默认值
本文关键字:成员 是否 默认值 初始化 对象 | 更新日期: 2023-09-27 17:55:55
如果我有一个类
class widget {
public int theNum;
public string theName;
}
我像这样发起
widget wgt = new widget { thename="tom" };
theNum
将为零。
有没有办法让我检查实例 wgt 以确定成员 theNum 是默认的,即从对象初始化中排除?
只要
theNum
是一个字段,你就无法判断它是否未初始化或是否显式初始化为其默认值(在本例中为 0
,但如果你有 public int theNum = 42
,可能会有所不同)。
如果theNum
是一个属性,则可以从属性 setter 中设置一个标志,该标志允许您确定是否调用了 setter,而不管您将属性设置为什么值。例如:
class widget {
private int theNum;
private bool theNumWasSet;
public string theName;
public int TheNum
{
get { return theNum; }
set { theNumWasSet = true; theNum = value; }
}
}
一种选择是将theNum
更改为int?
...则默认值将为 null 值,它不同于 0。
请注意,我希望这些是公共属性而不是公共字段 - 在这种情况下,您可以将属性类型设为int
,将int?
保留为支持字段类型,并通过测试字段值是否为空提供一些其他检查初始化的方法。
而不是int
使用int?
(这是System.Nullable<int>
的简写。 然后,如果没有人将其初始化为有效的整数,它将为空。