【问题标题】:Plain attribute or attribute with field?普通属性还是带字段的属性?
【发布时间】:2021-03-19 12:04:54
【问题描述】:

我在这个例子中看到了很多代码 sn-ps:

    private string _possessor;
    public string Possessor
    {
        get { return _possessor; }
        set { _possessor = value; }
    }

我的问题是,为什么不直接使用普通属性:

    public string Possessor { get; set; }

我在互联网上阅读,但看不出有什么区别?您可以在这两个示例中设置值,第二个示例需要更少的编码并且看起来更简洁。

【问题讨论】:

  • 如果只是这样,它可能是有点旧的遗留代码,其中自动属性还不是一个东西。该功能已在 C# 3 中添加(请参阅this)。但即使在它推出之后,总是有人不愿意采用新的语言特性(或者根本不知道)。
  • 这是风格问题,直到你需要在getter和/或setter中放入一些逻辑,然后你需要完全实现属性,或者使用表达式主体成员,这是你的另一件事可能会看到。

标签: c# class properties field


【解决方案1】:

在您展示的情况下,确实,每种方法都没有区别,第二种方法更干净。了解第一种方法很有用,因为有时您需要一个属性来做的不仅仅是获取/设置,因此在这种情况下您将需要使用第一种方法。

您还可以看到here,每个新的 c# 版本都创建了不同的实现属性的方式。第二种方法是Auto-implemented properties

【讨论】:

  • “清洁工”?好吧,它更短并且(在我看来)更具可读性,但在幕后,它是完全相同的东西。所以,取决于你对“干净”的定义。
  • 链接好像失效了。 @Fildor,我认为如果它的代码更少并且功能相同,那么它在一天结束时肯定会更干净?更容易找到您在课堂上需要的任何东西或类似的东西。
  • @Tobi 修复了链接
  • @Tobi 正如我所说:在某种程度上,是的。但这取决于你认为什么是“干净的”。
【解决方案2】:

这样做的主要目的是帮助实现数据封装,它通过将一个类中的数据隐藏在其他类中来帮助我们。这也称为数据隐藏。 这样做的另一个很好的原因是在我们设置特定值之前需要检查一些特殊的验证或特殊的业务规则。

你可以从这个网站https://www.geeksforgeeks.org/c-sharp-encapsulation/阅读更多关于封装的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 2015-11-25
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2016-01-10
    • 2017-06-11
    相关资源
    最近更新 更多