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

时间:2010-02-10 23:24:00

标签: c# naming-conventions

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

这是微软不做的例子:


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

        public string Bar        
        {            
            get { return bar; }        
        }    
    }
}

他们没有就这应该如何看待提供指导。大多数开发人员做了什么?

7 个答案:

答案 0 :(得分:11)

不,微软说公开可见的成员必须不仅仅是大小写:

  

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

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

所以这很好:

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

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

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

答案 1 :(得分:7)

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

所以,我经常这样做:

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; }
    }
}

答案 2 :(得分:0)

我喜欢:

protected string _Bar;

public string Bar        
{            
    get { return _Bar; }        
}    

答案 3 :(得分:0)

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

protected string _bar;

答案 4 :(得分:0)

答案 5 :(得分:0)

我个人会做以下事情:

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_范例,我有点喜欢它。当您阅读函数的代码体时,可以很容易地确切知道字段是什么。我不必指向任何东西,等待工具提示出现或类似的东西。我知道某些东西是静态的还是仅仅是字段前缀的实例。

答案 6 :(得分:0)

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

public class Foo    
{         
    protected string _bar; 

    public string Bar         
    {             
        get { return _bar; }         
    }     
}