Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对字段和属性进行最佳命名_C#_Naming Conventions - Fatal编程技术网

C# 如何对字段和属性进行最佳命名

C# 如何对字段和属性进行最佳命名,c#,naming-conventions,C#,Naming Conventions,字段和属性的差异不能仅限于大小写。那么,如果它们真的代表了相同的想法,那么它们应该有什么不同呢 以下是Microsoft的示例,说明了不应做的事情: using System; namespace NamingLibrary { public class Foo // IdentifiersShouldDifferByMoreThanCase { protected string bar; public s

字段和属性的差异不能仅限于大小写。那么,如果它们真的代表了相同的想法,那么它们应该有什么不同呢

以下是Microsoft的示例,说明了不应做的事情:


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

        public string Bar        
        {            
            get { return bar; }        
        }    
    }
}
他们没有给出这应该是什么样子的指导。大多数开发人员都做什么?

我喜欢:

protected string _Bar;

public string Bar        
{            
    get { return _Bar; }        
}    

假设大多数开发人员在成员变量前面加下划线,如下所示:

protected string _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; }
    }
}

我个人喜欢巴莱纳的这本书:


我个人做了以下几件事:

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

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

这取决于您或您的公司/组织的编码标准。但大多数程序员在字段上使用camelCasing或下划线+camelCasing,在属性上使用PascalCasing,如:

public class Foo    
{         
    protected string _bar; 

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

抢手货我错过了页面中的“此规则仅对公开可见的成员生效”。我的头在那里转了一会儿。而且,我完全同意这个领域永远不应该公开。这应该是真正的问题,而不是他们有相同的名字。公共字段破坏了封装,我不知道为什么它们可以这样编译。请简要说明一下。没有任何类型的字段命名前缀…类字段与局部函数变量无法区分,除非您使用此前缀。(这真是太冗长了)。添加前缀,如u或m_u,可以极大地帮助提高代码的清晰度,强烈建议使用。对于会员来说,“m”几乎会让我扔掉我的cookies。:)我知道这个帖子很老了,但在阅读了大量关于这个话题的讨论之后,我也决定在私有成员字段上加下划线。一眼就知道某个字段是私有成员字段,而不是只知道它属于特定的大小写规则,这是很有帮助的。我只是在编程时使用我的随手可得的随机标识符生成程序运行,当我想要一个新的成员名时,我只要向它索要一个并使用它。