【问题标题】:Properties with or without private fields [duplicate]有或没有私有字段的属性[重复]
【发布时间】:2013-12-27 16:35:07
【问题描述】:

更“真实”的是:使用带有或不带有私有字段的属性。 即

1.

class A
{
    int _field;
    public int Field
    {
        get{ return _field;}
        set{_field = value;}
    }
}

2.

class A
{
    public int Field{get;private set;}
}

【问题讨论】:

  • 请定义'more "true"'。无论如何,以上内容和许多其他内容的副本,基于意见的等等。 :)

标签: c# properties code-conversion


【解决方案1】:

数字 2 会自动创建一个支持字段,因此您始终在“幕后”拥有一个私有字段(尽管在后一种情况下无法直接访问)。

【讨论】:

    【解决方案2】:

    当你创建匿名属性时,编译器会为你创建相应的字段,所以它几乎是一样的,但是你只能通过属性访问自动创建的字段

    【讨论】:

      【解决方案3】:

      没有区别 - 编译器为您生成属性实现的方式与生成默认构造函数或 using 语句的代码完全相同。这两个类几乎 100% 等效,如果您反编译自动属性,您可以看到(唯一的区别是编译器使用的生成的支持字段的名称)

      class A
      {
          public int Field {get; private set;}
      }
      
      class A
      {
          int _field;
          public int Field
          {
              get { return _field; }
              private set {_field = value; }
          }
      }
      

      这完全取决于您的个人喜好。

      【讨论】:

        【解决方案4】:

        如前所述,第二个在编译时创建支持字段。如果您希望属性充当字段的公共访问器,您通常会自己定义一个支持字段,您可以在其中添加自定义逻辑或防止修改值(使用 setter 上的 private 关键字)。

        【讨论】:

          猜你喜欢
          • 2014-10-23
          • 2010-12-05
          • 2010-09-29
          • 2012-02-11
          • 2011-06-17
          • 2020-02-28
          • 1970-01-01
          • 2012-06-30
          相关资源
          最近更新 更多