请注意,以下代码在类中是单个类
private string _fee;
private string _receipt;
public string Fee
{
get { return _fee; }
private set { _fee = value; }
}
public string Receipt
{
get { return _receipt; }
private set { _receipt = value;}
}
public MyValue(string fee, string receipt) : this()
{
_fee = int.Parse(receipt).ToString();
_receipt = receipt;
}
你可以看到我的财产什么都不做,所以我应该使用
_fee = int.Parse(fee).ToString();
_receipt = receipt;
或
Fee = int.Parse(fee).ToString();
Receipt = receipt;
答案 0 :(得分:16)
使用属性,如果您使用的是C#3,则应使用自动实现的属性,如下所示:
public string Fee
{
get; private set;
}
public string Receipt
{
get; private set;
}
public MyValue(string fee, string receipt) : this()
{
this.Fee = int.Parse(fee).ToString();
this.Receipt = receipt;
}
答案 1 :(得分:10)
我会一直使用属性 - 它为您提供了更大的灵活性:
此外,似乎.NET反射在属性与字段上的行为略有不同,因此如果您混合使用属性和字段,则需要了解这些细微差别 - 如果仅使用属性,则表示良好去: - )
在课堂内,您可以使用后备存储字段或属性 - 如果您使用该属性,将使用您的setter可能具有的任何副作用(更新其他字段,记录您的呼叫等) - 如果直接访问后备存储字段,则可以解决这些问题。这可能是好事还是坏事 - 取决于您的情况。只要知道你在做什么! : - )
马克
答案 2 :(得分:4)
在这种情况下,只要您在整个代码中保持一致就无所谓了。
但是,如果您的属性标记为virtual
,那么在构造函数中访问它们不是一个好主意,最好直接使用这些字段。这是因为您的属性的行为可能被覆盖,并且您的基类可能会调用破坏代码。
编辑:只是为了澄清,我只是提到了OP的例子中方法的差异。 marc_s给出了一些很好的观点,说明为什么属性在大多数情况下都是有利的。
答案 3 :(得分:0)
我总是直接使用这些成员。
这是因为您可能在setter中实现了无法在构造函数中正确运行的代码,因为其他一些字段未初始化。
如果属性是虚拟的,可能会变得更糟。