【问题标题】:automatic properties in C# [duplicate]C#中的自动属性[重复]
【发布时间】:2014-08-22 20:33:12
【问题描述】:

除了减少代码行之外,还需要了解使用自动属性的好处吗?

最初我们使用如下:

private int sample;

public int Sample
{ get {return sample};
  set {this.sample=value};
}

现在我们直接得到 n 设置它。为什么我们以前定义一个私有变量?

【问题讨论】:

标签: c# properties


【解决方案1】:

您仍在创建一个私有变量 - 它只是由编译器在幕后为您完成的。该变量被赋予了一个“难以形容的名称”,确保您无法在源代码中引用它。

您仍然可以获得属性的所有好处(您可以稍后从自动属性更改为“手动”属性,不会出现兼容性问题),但不会遇到任何麻烦。好处是只是,代码最终会更加简洁。不过,我认为这是一个显着的好处:)

【讨论】:

    【解决方案2】:

    您的私有示例变量称为支持字段,它保存属性的实际数据。如果属性只是基本的获取/设置,则无需自己声明支持字段。正如 Jon Skeet 提到的,支持字段将由编译器在幕后生成。如果您的需求发生变化,您可以稍后决定自己声明一个支持字段,并在您的属性中使用该支持字段。由于您的其余代码使用该属性,您的代码仍将编译。

    当您的属性包含一些逻辑时,支持字段非常有用。

    例如,如果没有支持字段(不在 setter 中),则无法完成以下操作

    public int Sample
    {
        get { return _sample; }
        set 
        {
           if (value > _sample) 
              _sample = value;
    
        }
    }
    

    另外,如果 getter 和 setter 没有逻辑,你的属性也可以这样写。

    public int Sample { get; set; }
    

    【讨论】:

    • 您的示例不是与问题完全相反,证明了“手动”属性的好处吗?
    • 我以为发帖者希望回答以下问题“我们为什么要定义私有变量?”
    • 啊,很公平,没看到那一点!
    • " 如果属性只是基本的 get/set,则不需要支持字段。"请对此声明提供帮助。在保存实际数据的基本获取/设置的情况下?
    • @Meg 请参阅 Jon Skeet 对此的回答:如果没有明确定义支持字段,编译器会在幕后创建一个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2013-03-11
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多