使用私人或使用财产?C#

Ath*_*han 3 c# properties private

请注意,以下代码在一个类中是一个类

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;
}
Run Code Online (Sandbox Code Playgroud)

你可以看到我的财产什么都不做,所以我应该使用

_fee = int.Parse(fee).ToString();
_receipt = receipt;
Run Code Online (Sandbox Code Playgroud)

要么

Fee = int.Parse(fee).ToString();
Receipt = receipt;
Run Code Online (Sandbox Code Playgroud)

Cha*_*lie 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;
}
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 10

我会一直使用属性 - 它给你更多的灵活性:

  • 如果需要,您可以稍后创建更精细的getter和setter方法
  • 您可以在getter和setter上指定不同的可见性
  • 如果需要,您可以定义虚拟属性并覆盖后代类中的属性
  • 您可以对属性使用数据绑定,但不能使用字段

此外,似乎.NET反射在属性与字段上的行为略有不同,因此如果您混合使用属性和字段,则需要了解这些细微差别 - 如果仅使用属性,则可以使用: - )

在课堂内,您可以使用后备存储字段或属性 - 如果您使用该属性,将使用您的setter可能具有的任何副作用(更新其他字段,记录您的呼叫等) - 如果您访问直接支持商店领域,你可以解决这些问题.这可能是好事还是坏事 - 取决于您的情况.只要知道你在做什么!:-)

渣