如何最佳命名字段和属性

6

Microsoft 表示,字段和属性必须在大小写以外有所不同。那么,如果它们真的代表相同的概念,它们应该如何不同呢?

这是 Microsoft 不推荐的示例:


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

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

他们没有提供如何实现的指导。大多数开发者会怎么做?

我只需要在编程时运行我的方便的随机标识生成程序,当我想要一个新的成员名称时,我只需向它请求一个并使用它。 - Thomas Eding
7个回答

11

不是的,微软公开表示可见的公共成员必须有更大的差别,而不仅仅是大小写区分:

此规则仅适用于可公开查看的成员。

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

因此这样是可以的:

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

我的个人原则是不允许任何非私有字段,到那时它就不成问题了。

你真的需要受保护的字段吗?如果你想从派生类中进行更改,那么考虑将属性的setter设置为受保护的。


不错!我在页面上漏掉了“此规则仅适用于公开可见成员。”我的脑袋一时有点晕。 - User1
此外,我完全同意字段永远不应该是公共的。这才是问题所在,而不是它们具有相同的名称。公共字段会破坏封装性,我不确定为什么它们可以以这种方式编译。 - User1
只是一个快速的提示。如果没有任何字段命名前缀,类字段与本地函数变量是无法区分的,除非你在它们所有的前面都加上this(这真的很冗长)。添加前缀,例如_或m_,可以极大地提高代码的清晰度,强烈建议这样做。 - jrista

7

这可能会让一些开发人员感到不满,但我喜欢使用命名约定,让我一眼就能区分成员变量和局部变量。

所以,我经常做一些类似的事情:

public class Foo
{
    protected string _bar;

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

...or...

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

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

'm' 成员几乎让我吐了。 :) - User1
我知道这个线程很旧,但在阅读了大量关于这个主题的讨论后,我也决定使用下划线标记私有成员字段。这只是为了方便一眼看出某些内容是私有成员字段,而不仅仅知道它符合某种大小写规则。 - user164226

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_ 范例,我有点喜欢它。当您阅读函数的代码主体时,这使得您很容易知道一个字段是什么。我不必指向任何东西并等待工具提示出现或类似的事情。我知道某些东西是静态的还是实例只是通过其字段前缀。


0

这取决于您或您所在公司/组织的编码标准。但大多数程序员在字段上使用驼峰式命名法或下划线+驼峰式命名法,在属性上使用帕斯卡式命名法,例如:

public class Foo    
{         
    protected string _bar; 

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

0

我喜欢:

protected string _Bar;

public string Bar        
{            
    get { return _Bar; }        
}    

0

大多数开发人员会像这样在成员变量前加下划线:

protected string _bar;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接