C#保護フィールドの大文字表記規則


17

C#の保護フィールド名の大文字と小文字の規則は何ですか?

_myVar(プライベートフィールドなど)またはMyVar(プロパティなど)ですか?


3
本当にフィールドを保護したいのですか?パブリックフィールドを持たない理由のほとんどは保護されたフィールドにも当てはまるため、代わりに保護されたプロパティを使用する方が良いと思います。
svick

テストケースでは、通常、保護されたフィールドを使用すると便利ですが、プロパティに変更できる場合があります。しかし、保護されたフィールドが必要な場合、命名規則は何ですか?
ルイスリース

2
_myVarはプライベートフィールドの正しい規則ですか?(あなたはそれを前提にしています)ここで宗教戦争を始めようとはせず、プライベートフィールドに対して何らかのarbitrary意的なルールを選択した場合、保護されたフィールドに対して別のルールを選択できると言ってください。唯一のアドバイスは、一貫性を保つことです。
マレック

回答:


13

マイクロソフトが作成した、クラスライブラリ開発の設計ガイドラインと呼ばれるものがあります。

次のように書かれています:

パブリックまたは保護されているインスタンスフィールドを提供しないでください。

パブリックフィールドと保護フィールドはバージョンが適切ではなく、コードアクセスセキュリティ要求によって保護されていません。パブリックに表示されるフィールドを使用する代わりに、プライベートフィールドを使用して、プロパティを通じて公開します。

と同様:

  • フィールド名にPascalケーシングを使用してください

  • フィールド名にプレフィックスを使用しないでください。たとえば、g_またはs_を使用して、静的フィールドと非静的フィールドを区別しないでください。

_接頭辞については、this.慣例と同じくらい頻繁に使用されます(これまでは、CodePlex / GitHubでソースコードを参照していました)。たとえば、ReSharper _は、命名チェックを促進します。


「フィールド名に接頭辞を使用しないでください」を含めないことに少し選択的でした。Pascalのケーシングルールと一緒にMSDNから:) resharperがデフォルトで_プレフィックスをプロモートするのは事実ですが、MSDNの慣習を引用している場合は、自分の印象と混ぜてはいけません。
マレック

2
「うまくバージョン管理しない」とはどういう意味ですか?保護されたフィールドは推奨されていないため、その名前についてのガイドラインはないということですか?とにかく、Resharperはお勧めのようですMyVar
ルイスリース

2
@マレック:私は自分の好みを含めました。Resharperが好むものを単に述べました。そして、それは選択的であるという私の意図ではありませんでした。更新された回答
-jgauffin

1
@jgauffinあなたのコードに対してリフレクションを使用している消費者を除いて、フィールドを呼び出し元に対して透過的なプロパティに変更していませんか?保護されたフィールドを同じ名前の保護されたプロパティに変更すると、互換性が失われますか?
Quantic

1
バイナリ互換性が壊れます:msdn.microsoft.com/en-us/library/ta31s3bc
v
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.