重要な更新(2016年4月12日):
.NET CoreFXチームの内部標準は、理由に関する洞察を与えることなく、アンダースコア表記を使用することを主張していることが注目されました。我々はルール#3をよく見ればしかし、それはのシステムがあることが明らかになり_、t_、s_なぜ示唆プレフィックス_最初の場所に選ばれましたが。
- 私たちは、使用し
_camelCase、内部および民間分野のため、可能であれば読み取り専用使用します。プレフィックスインスタンスフィールドには_、静的フィールドにはs_、スレッド静的フィールドにはを付けt_ます。静的フィールドで使用した場合、readonly後に来る必要がありますstatic(つまりstatic readonlyませんreadonly static)。
this.どうしても必要な場合以外は避けます。
したがって、.NET CoreFXチームがパフォーマンスクリティカルなマルチスレッドのシステムレベルのコードに取り組んでいる場合は、次のことを強くお勧めします。
- コーディング標準に準拠し、
- アンダースコア表記を使用し、
- これ以上この回答を読まないでください
そうでなければ読んでください...
元の答え:
まず、私たちが話していることについて合意しましょう。問題は、可視性修飾子が許可する場合に、クラス/サブクラスの非静的メソッドおよびコンストラクター内からインスタンスメンバーにアクセスする方法です。
アンダースコア表記
- プライベートフィールドの名前に「_」プレフィックスを使用することを提案します
- また、絶対に必要な場合を除いて、「this」は使用しないでください。
この表記
- 常に「これ」を使用することをお勧めします。インスタンスメンバーにアクセスする
なぜこの表記が存在するのですか?
これがあなたのやり方だから
- 同じ名前を共有する場合、フィールドからパラメータを区別する
- 現在のインスタンスのコンテキストで作業していることを確認してください
例
public class Demo
{
private String name;
public Demo(String name) {
this.name = name;
}
}
なぜアンダースコア表記が存在するのですか?
「これ」と入力したくない人もいますが、フィールドとパラメータを区別する方法が必要なので、フィールドの前に「_」を使用することに同意しました
例
public class Demo
{
private String _name;
public Demo(String name) {
_name = name;
}
}
個人的な好みの問題だと思うかもしれませんが、どちらも同じように良い/悪いです。ただし、この表記がアンダースコア表記に勝る特定の側面があります。
明快さ
- アンダースコア表記は名前を混乱させる
- この表記は名前をそのまま保持します
認知負荷
更新:指摘されたように、以下は有利な点ではありません
メンテナンス
オートコンプリート
インスタンスメンバーのリストを表示する必要がある場合:
- 「_」を入力すると、オートコンプリートポップアップにプライベートフィールドと、残りのインスタンスメンバーと混合したリンクアセンブリから利用可能なすべてのタイプが表示されるため、アンダースコア表記はあまり役に立ちません
- this-notationは明確な答えを与えます。「this」と入力すると、表示されるのはメンバーのリストだけで、それ以外は何も表示されません。
あいまいさ
Intellisenseの助けなしにコードを処理しなければならない場合があります。たとえば、コードレビューを行ったり、ソースコードをオンラインで閲覧したりする場合です。
underscore-notationがあいまいです:Something.SomethingElseが表示されても、Somethingがクラスであり、SomethingElseがその静的プロパティであるかどうかはわかりません...または、Somethingは、SomethingElseの独自のプロパティを持つ現在のインスタンスプロパティです
この表記は明確です。Something.SomethingElseが表示された場合、それは静的プロパティを持つクラスのみを意味し、this.Something.SomethingElseが表示された場合、Somethingがメンバーであり、SomethingElseがそのプロパティであることがわかります。
拡張メソッド
「this」を使用せずにインスタンス自体で拡張メソッドを使用することはできません。
- アンダースコア表記では、「this」を使用しないことが必要ですが、拡張メソッドでは、
- この表記はためらいからあなたを救います、あなたはいつも「これ」の期間を使います。
Visual Studioのサポート
公式の推奨事項
特にC#では、「アンダースコアを使用しない」と明記されている多くの公式ガイドラインがあります。