如何最好地命名字段和属性

微软表示,字段和属性必须不仅仅是大小写。 那么,如果他们真正代表同一个想法,他们应该如何区别?

这是微软不做的例子:

using System; namespace NamingLibrary { public class Foo // IdentifiersShouldDifferByMoreThanCase { protected string bar; public string Bar { get { return bar; } } } } 

他们没有给出如何看待它的指导。 大多数开发人员做了什么?

不,微软表示, 公开可见的成员必须与以下案例不同:

此规则仅针对公开可见的成员触发。

(包括受保护的成员,因为它们对派生类是可见的。)

所以这很好:

 public class Foo { private string bar; public string Bar { get { return bar; } } } 

我个人的规则是不允许任何其他私人领域,此时这不是问题。

你真的需要保护区吗? 如果您希望能够从派生类变异,那么如何使该属性具有受保护的setter?

这可能会让一些开发人员感到厌恶,但我喜欢命名约定,让我一目了然地将成员变量与本地人区分开来。

所以,我经常这样做:

 public class Foo { protected string _bar; public string Bar { get { return _bar; } } } 

…要么…

 public class Foo { protected string mBar; // 'm' for member public string Bar { get { return mBar; } } } 

我喜欢:

 protected string _Bar; public string Bar { get { return _Bar; } } 

认为大多数开发人员使用下划线为成员变量加前缀如下:

 protected string _bar; 

我个人做了以下事情:

 class SomeClass { private static string s_foo; // s_ prefix for static class fields private string m_bar; // m_ prefix for instance class fields public static string Foo { get { return s_foo; } } public string Bar { get { return m_bar; } } } 

我最初只使用_或m_作为我所有字段的前缀,直到我开始通过Reflector挖掘大量的Microsoft .NET代码。 微软也使用s_和m_范例,我有点喜欢它。 当您阅读函数的代码体时,可以很容易地确切知道字段是什么。 我不必指出任何东西,等待工具提示出现或类似的东西。 我知道某些东西是静态的还是仅仅是字段前缀的实例。

这取决于您或您公司\组织的编码标准。 但大多数程序员使用camelCasing或者下划线+ camelCasing对Fields和PascalCasing进行属性,例如:

 public class Foo { protected string _bar; public string Bar { get { return _bar; } } }