我命名私有成员变量 _x
以避免这种情况1。支持/反对这一点的论据比比皆是。
private string _name;
public Employee(string name, string alias)
{
// Equivalent to `this._name = name`, as _name is not shadowed
_name = name;
}
另一方面,我反对命名参数_x
,因为参数名称是公共合约的一部分2。这个契约应该是干净、稳定的,并且不应该由包含成员变量名称的内部实现来决定。
过去,在这种情况下,我使用 、 和 等名称employeeName
作为aName
参数theAlias
,但我不喜欢最终使用的人工修饰符。如果我不能对私有变量使用下划线,我会使用this.x
并且不会三思而后行。
1需要这种形式是因为this
在 C# 中是“隐式的”和变量阴影。也就是说,this.x
它是需要的,因为x
它会引用一个局部变量/参数,如果它存在的话 - 它在这里。
private string name;
public Employee(string name, string alias)
{
// Re-assignes parameter to itself.
// Does NOT assign member variable!
name = name;
}
2我相信名称中的下划线会破坏“CLS 兼容性”,但这不是我关心的问题,并且仅对私有成员变量使用此约定可避免公开暴露此类不兼容的名称。