我经常发现我想在C#中编写类似这样的代码,但我对标识符名称感到不舒服:
public class Car { private Engine engine; public Engine Engine { get { return engine; } set { engine = value; } } public Car(Engine engine) { this.engine = engine; } }
这里我们有四种不同的东西叫做"引擎":
Engine
班级.引擎似乎是一个好的,自然的名字.
Engine
公共财产.似乎很傻把它称为MyEngine或TheCarsEngine.
engine
支持财产的私人领域.一些命名方案将推荐m_engine
或_engine
,但其他人说应该避免所有前缀.
engine
构造函数上的参数名称.我已经看到了命名方案,建议在所有参数上加上下划线,例如_engine
.我真的不喜欢这个,因为调用者可以通过Intellisense看到参数.
我不喜欢写的代码的特定事情是:
如果您在构造函数中更改参数名称但在构造函数体中错过了它的使用,则会得到编译器可能无法发现的细微错误.
Intellisense有一个坏习惯,为你自动完成错误的事情,有时候你不会注意到它改变了这种情况.如果构造函数主体意外结束,您将再次获得一个微妙的错误this.engine = Engine;
看起来每个名字都是孤立的,但它们一起是坏的.有什么东西要屈服,但是什么呢?我更喜欢更改私有字段,因为它对用户不可见,所以我通常最终会m_engine
解决一些问题,但会引入一个前缀并且不会阻止Intellisense更改engine
为Engine
.
你会如何重命名这四个项目?为什么?
(注意:我意识到这个例子中的属性可能是一个自动属性.我只是不想让这个例子过于复杂.)
另请参阅: 使用不同于其类型的变量名称,我是不道德的?
在这种情况下,我会将它们命名为与示例中的完全相同.
这是因为命名清楚每个元素保存和/或将用于哪些数据.
我唯一要改变的是C#3是使用一个自动属性来删除局部变量.
对于私人会员,我总是以下划线作为前缀:
private Engine engine;
变为:
private Engine _engine;
每当我看到m_
它,它就会让我的胃变冷.