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

Use*_*er1 6 c# naming-conventions

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

这是微软不做的例子:


using System;
namespace NamingLibrary
{    
    public class Foo    // IdentifiersShouldDifferByMoreThanCase    
    {        
        protected string bar;

        public string Bar        
        {            
            get { return bar; }        
        }    
    }
}
Run Code Online (Sandbox Code Playgroud)

他们没有提供关于它应该如何看的指导.大多数开发人员做了什么?

Jon*_*eet 11

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

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

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

所以这很好:

public class Foo
{
    private string bar;
    public string Bar { get { return bar; } }
}
Run Code Online (Sandbox Code Playgroud)

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

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


Sco*_*ith 7

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

所以,我经常这样做:

public class Foo
{
    protected string _bar;

    public string Bar
    {
        get { return _bar; }
    }
}
Run Code Online (Sandbox Code Playgroud)

...要么...

public class Foo
{
    protected string mBar;    // 'm' for member

    public string Bar
    {
        get { return mBar; }
    }
}
Run Code Online (Sandbox Code Playgroud)