公共字段与自动属性

公共字段与自动属性

我们经常被告知应该通过为类字段创建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;}


慕盖茨4494581
浏览 663回答 3
3回答

MM们

忽略API问题,我发现使用属性最有价值的是调试。CLR调试器不支持数据断点(大多数本机调试器都支持)。因此,不可能在类上特定字段的读或写上设置断点。在某些调试场景中,这是非常有限的。由于属性是作为非常瘦的方法实现的,因此可以在其值的读和写上设置断点。这使他们在田野上有了很大的优势。

大话西游666

从字段更改到属性会破坏契约(例如,需要重新编译所有引用代码)。因此,当您有一个与其他类的交互点-任何公共(且通常是受保护的)成员-时,您希望为未来的增长做计划。通过始终使用属性来做到这一点。今天把它变成一个自动属性是没有意义的,三个月后,你会意识到你想让它变懒,并在getter中放置一个空检查。如果您使用了某个字段,这是一个最好的重新编译更改,在最坏的情况下是不可能的,这取决于谁&还有什么依赖于您的程序集。
打开App,查看更多内容
随时随地看视频慕课网APP