一尘不染

公共字段与自动属性

c#

人们经常被告知,我们应该通过为类字段创建getter和setter方法(C#中的属性)来保护封装,而不是将字段暴露给外界。

但是在很多情况下,只有一个字段可以保存值,并且不需要任何计算即可获取或设置。对于这些,我们都将使用以下数字:

public class Book
{
    private string _title;

    public string Title
    {
          get{ return _title;  }
          set{ _title = value; }
    }
}

好吧,我有一个坦白的话,我忍不住写所有的东西(真的,不必写它,而不必去看它),所以我流氓并使用了公共领域。

然后是C#3.0,我看到它们添加了自动属性:

public class Book
{
    public string Title {get; set;} 
}

哪个比较整洁,我对此很感激,但实际上,与仅公开场地有何不同?

public class Book
{
    public string Title;
}

阅读 255

收藏
2020-05-19

共1个答案

一尘不染

在我前段时间遇到的一个相关问题中,有一个指向Jeff博客上的帖子的链接,解释了一些区别。

属性与公共变量

  • 反射在变量和属性上的工作方式不同,因此,如果您依赖反射,则使用所有属性会更容易。
  • 您无法与变量进行数据绑定。
  • 将变量更改为属性是一项重大更改。例如:
    TryGetTitle(out book.Title); // requires a variable
    
2020-05-19