C#protected field to private,添加属性 - 为什么?

Sar*_*els 5 c# static-analysis access-levels

在Visual Studio 2008 Team System中,我刚刚在我的一个C#项目上运行了Code Analysis(来自Analyze菜单).产生的警告之一如下:

Microsoft.Design:因为字段"Connection._domain"在其声明类型之外是可见的,所以将其可访问性更改为private,并添加一个具有与当前字段相同的可访问性的属性,以提供对它的访问.

它指的是以下字段:

public abstract class Connection
{
    protected string _domain;
}
Run Code Online (Sandbox Code Playgroud)

我不明白这个建议背后的原因.这是我认为它要我做的事情:

public abstract class Connection
{
    private string _domain;
    protected string Domain { get { return _domain; } set { _domain = value; } }
}
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 我是否正确理解了建议要求我做什么,代码明智?
  2. 为什么要我这样做?

Gar*_*ill 13

是的,我认为您理解正确 - 尽管在C#的更高版本中,有一种更简洁的方式来编写它:

public string Domain { get; set; }
Run Code Online (Sandbox Code Playgroud)

为什么?这都是关于封装的.如果按照建议执行操作,则可以稍后更改Domain属性的定义,而不会影响使用该属性的任何调用代码.由于您的类是公开的,并且可能会被您没有编写的代码调用,这可能非常重要.