このようなケースを避けるために、プライベート メンバー変数 に名前を付けます1。これには賛成/反対の議論がたくさんあります。_x
private string _name;
public Employee(string name, string alias)
{
// Equivalent to `this._name = name`, as _name is not shadowed
_name = name;
}
一方、パラメーター名はパブリック コントラクトの一部であるため、パラメーターの命名には反対です2。このコントラクトはクリーンで安定している必要があり、メンバー変数名を含む内部実装によって決定されるべきではありません。_x
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 互換性」を損なうと思いますが、それは私にとっては問題ではなく、プライベートメンバー変数にのみこの規則を使用することで、そのような互換性のない名前を公に公開することを回避できます。