Microsoft says字段和属性的区别不仅仅是大小写。那么,如果他们真正代表同一个想法,他们应该如何区别?
这是微软不做的例子:
using System;
namespace NamingLibrary
{
public class Foo // IdentifiersShouldDifferByMoreThanCase
{
protected string bar;
public string Bar
{
get { return bar; }
}
}
}
他们没有就这应该如何看待提供指导。大多数开发人员做了什么?
答案 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)
我个人喜欢Balena的这本书:
答案 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; }
}
}