【问题标题】:c#: getter/setterc#: 获取器/设置器
【发布时间】:2011-07-15 15:03:35
【问题描述】:

我在某处看到类似下面的内容,想知道它是什么意思。我知道他们是 getter 和 setter,但想知道为什么字符串类型是这样定义的。谢谢你帮助我。

public string Type { get; set; }

【问题讨论】:

标签: c# getter-setter


【解决方案1】:

那些是Auto-Implemented Properties(简称自动属性)。

编译器将自动生成以下简单实现的等效项:

private string _type;

public string Type
{
    get { return _type; }
    set { _type = value; }
}

【讨论】:

  • @barlop 作为来自谷歌的人,没有任何线索,需要更新什么? M. Hassans 回答你的意思了吗?谢谢。
  • @Aethenosity 回想起来我认为没关系..我在考虑 getter setter 的例子。提问者有一个更简洁的 getter setter 的有效案例(作为一个衬里/不需要第二个字段)。您也可以写 public int b { get { return b * 2; } } 不需要第二个字段。但我认为当你有一个身体的二传手时,你需要第二个字段。这个展示了一个有身体的二传手。虽然它与提问者的单线一样。
  • @Aethenosity 还有 c# 7,因此当 setter 有主体时,确保您仍然需要第二个字段,但它有 => 语法并且没有 return 关键字。虽然那不是我的想法。我认为第二个字段是不必要的,尽管我后来发现有时第二个字段是必要的。在此处的示例中,第二个字段不是必需的('因为没有正文的默认设置器会这样做),但是回答者将其放入(设置器正文和第二个字段),以向提问者解释他们的行没有第二个领域正在做。
【解决方案2】:

这是一个auto-property,它是这个的简写符号:

private string type;
public string Type
{
  get { return this.type; }
  set { this.type = value; }
}

【讨论】:

  • ... 除了支持字段不可访问。
  • ...这就是为什么它被称为支持字段
  • 不过,您应该可以通过反射将其视为<Type>k__BackingField
【解决方案3】:

在 C# 6 中:

现在可以将自动属性声明为字段:

public string FirstName { get; set; } = "Ropert";

只读自动属性

public string FirstName { get;} = "Ropert";

【讨论】:

    【解决方案4】:
    public string Type { get; set; } 
    

    和做没有什么不同

    private string _Type;
    
    public string Type
    {    
      get { return _Type; }
      set { _Type = value; }
    }
    

    【讨论】:

      【解决方案5】:

      这意味着编译器在运行时定义了一个支持字段。这是自动实现属性的语法。

      更多信息:Auto-Implemented Properties

      【讨论】:

        【解决方案6】:

        它是一个自动支持的属性,基本上相当于:

        private string type;
        public string Type
        {
           get{ return type; }
           set{ type = value; }
        }
        

        【讨论】:

          【解决方案7】:

          这些被称为自动属性。

          http://msdn.microsoft.com/en-us/library/bb384054.aspx

          在功能上(就编译的 IL 而言),它们与带有支持字段的属性相同。

          【讨论】:

          • 还能在类中引用私有的_type或type,还是直​​接使用Type?
          • 不,但是您可以为 auto 属性指定修饰符: public string Type { get;私人套装; }
          • 在这种情况下您将无法访问 _type。
          • 所以在这种情况下 this.Type = "foo";应该没问题,但是来自外部 instance.Type = "foo";不会.. 这些自动道具绝对是对语言的有益补充。谢谢。
          【解决方案8】:

          你也可以使用 lambda 表达式

          public string Type
          {
              get => _type;
              set => _type = value;
          }
          

          【讨论】:

            【解决方案9】:

            随着 C# 6 的发布,您现在可以对私有属性执行类似的操作。

            public constructor()
            {
               myProp = "some value";
            }
            
            public string myProp { get; }
            

            【讨论】:

            • 可以在C# 6中直接设置初始值: public string myProp { get; } ="some value") 没有构造函数;
            猜你喜欢
            • 1970-01-01
            • 2013-02-07
            • 1970-01-01
            • 2014-10-16
            • 1970-01-01
            • 1970-01-01
            • 2014-07-24
            • 1970-01-01
            相关资源
            最近更新 更多