【问题标题】:Difference between empty property declaration [duplicate]空属性声明之间的区别[重复]
【发布时间】:2011-10-04 07:28:03
【问题描述】:

可能重复:
C# getters, setters declaration

这些属性声明有什么区别?它们是如何工作的,为什么是首选。

public string aString {get;set;}

或

    private string bString = "";
    public string aString
    {
        get { return bString; }
        set { bString = value; }
    }

注意:这不是一个紧急或重要的问题,而是询问知道为什么应该以某种方式完成某事的人的问题。另外,请举例说明哪种方案最适合每种实施方式。

【问题讨论】:

  • 可能的错字;设置 { 字符串 = 值; } 可能应该设置 { bString = value; } ?
  • 这个问题被问了很多次。尝试搜索。
  • 另一个可能的错误:auto 属性被声明为 public;全部财产是私有的。你是认真的吗?
  • 请注意,如果您使用BinaryFormatter(这本身是有问题的)或其他一些字段级反射工具,那么在它们之间进行更改可能会出现问题。通常使用自动实现的属性语法是非常安全和可取的。

标签: c# syntax


【解决方案1】:

第一个是automatic property,第二个是我们知道的经典属性。

在 C# 3.0 及更高版本中,自动实现的属性使 当不需要额外的逻辑时,属性声明更简洁 在属性访问器中。它们还使客户端代码能够创建 对象。当您声明一个属性时,如下所示 例如,编译器创建一个私有的匿名支持字段, 只能通过属性的 get 和 set 访问器访问。

当您没有任何特殊逻辑要添加到 get 和 set 部件属性中时,您可以只使用自动属性,因为它的代码更少,代码更少意味着更容易维护和更少的错误。

仅当您需要在属性上添加一些逻辑(如验证)时,才应切换到经典属性语法。

【讨论】:

    【解决方案2】:

    设计: 如果您需要在分配的确切时刻做某事(引发事件、更改其他字段、保存撤消信息、写入文件和大量其他可能性),请使用 second。

    实用:如果您只需要调试,请使用 second,因为您不能在自动生成的属性上放置 breakpoint。

    在所有其他情况下首先使用。

    【讨论】:

      【解决方案3】:

      最明显的区别是你不能设置 aString 变量并返回它,因为你总是返回 bString...

      【讨论】:

        【解决方案4】:

        一个区别是,在自动属性的情况下,您不能拥有私有设置器。这只是一种语言快捷方式或语法糖,使事情更容易开发(生成的代码也看起来更干净......)。 如果您查看已编译的程序集,编译器会生成与“经典”变体中完全相同的代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-20
          • 2015-07-29
          • 2015-12-14
          • 2014-11-21
          • 2011-05-23
          • 1970-01-01
          • 2013-06-05
          • 1970-01-01
          相关资源
          最近更新 更多