web-dev-qa-db-ja.com

C#.NETインスタンス変数の命名規則?

私はビジネスで小さなインターンシップをやっていて、彼らのコードで私は次のような名前のクラスを見つけています:

public class FlagsConfig
{
    private static FlagsConfig _instance; 
}

それは _instance C#でのあらゆる種類の命名規則?

私は開発者に尋ねますが、彼らは今日と来週いくつかのコースですべて出かけています。

35
Shogoot

多分これはあなたを助けるかもしれません: 。net命名規則とプログラミング標準-ベストプラクティス

このドキュメントによると、それは問題ありません。

35
Manu

privateメンバーの場合、さまざまな規則がたくさんあります。プレフィックスが好きな人もいれば、そうでない人もいます(個人的に私は好きではありません)。インスタンス変数と静的変数を区別したい人もいれば、そうでない人もいます。

private string m_foo;
private static string s_foo;

個人的には、テキストを読んでいるときにアンダースコアが邪魔になることがわかります-そして、それはあなたが読む方法に依存すると確信しています。私が読んだとき、私は発声し、余分なビットがその邪魔をします。他の人にとって、それは明らかに問題ではありません。ローカル変数とメンバー変数の違いがないことが問題であると考える人もいます。私は通常、何が何であるかが明らかな短いメソッドを記述します。

さらに重要なことは、APIを作成している場合などは、公開されているメンバー(保護されているメンバーやパラメーター名を含む)の名前であることに注意してください。この時点で、 Microsoftのガイドライン

26
Jon Skeet

_instanceはC#でのあらゆる命名規則ですか?

まず、多くの人々が命名ガイドラインを参照しています。これらのガイドラインの多くは、型のpublic表面領域にのみ適用されることに注意してください。あなたが言及しているようなプライベートメンバーは内部実装の詳細であるため、それらを作成した組織のポリシーの対象となり、パブリックエレメントに表示されることを期待するフレームワーク設計ガイドラインの対象ではありません。

プライベートな実装の詳細については、アンダーバーのプレフィックスは多くの組織で一般的です。個人的には必要ないと思いますが、好きな人もいます。

ただし、重要なのはプライベートな実装の詳細であっても、2つのアンダーバーを使用しないでください C#コンパイラチームは、2つのアンダーバーで始まるWordを将来選択する意味を持つようにする権利を留保します言語のバージョン。これは、実際に新しい非コンテキスト予約キーワードを追加する必要があり、実際に、既存のコードを壊したくない場合の「エスケープハッチ」です。

これは、C#4仕様のセクション2.4.2に記載されています。

21
Eric Lippert

はい、それはプライベートフィールドの一般的な命名基準です:

http://csharpguidelines.codeplex.com/

下線が乱雑であるという@JonSkeetに偶然に同意しますが、MS標準であるAFAIKです。彼がリンクしているドキュメントは、ライブラリでアンダースコアを使用していないではないを示していますが、それはパブリックメンバーを指していると思います。

更新

最初のリンクは実際には反対を支持しています。アンダースコアは使用しないでください。私の間違いですが、それはまだ有用なリソースです。

スキート氏に敬意を表して、私は彼のリンクをさらにたどりました: http://msdn.Microsoft.com/en-us/library/ms229012.aspx これは、アンダースコアを使用しないことも述べていますただし、そのガイダンスは静的メンバー、保護メンバー、パブリックメンバーに適用されますが、プライベートメンバーには必ずしも適用されません。

ボトムライン:はい、それは一般的な標準ですが、試す前に、まず内部で合意された標準を使用してください外部標準を見つけて使用する。

13
John Weldon

多くのガイドラインと標準から選択できますが、職場で使用されている標準に下線が使用されている場合は、それを使用する必要があります。特に、そこでのみインターンシップを行っている場合、目標は、「より良い」(ただし異なる)いくつかの標準に従うのではなく、(そのビジネス内で)物事を一貫して保つことです。

おそらく、開発者(または上層部の上司)に、彼らが使用している標準に関するドキュメント/リンクがあるかどうかを尋ねるのに、よりよい質問はありますか?

8
Miika L.

それは私の経験では比較的一般的です。特定の種類の変数(プライベート、メソッドパラメーターなど)を識別するために、開発者は異なる命名条件を採用する場合があります。

例えば.

  • 変数名
  • variableName(キャメルケース)
  • _変数
  • VARIABLE_NAME

会社によって違うと思います。

4
glosrob

_nameは乱雑で混乱を招き、非常に古いスタイルです。それをしないでください。

.NET 4.0の一般的な命名規則 http://msdn.Microsoft.com/en-us/library/ms229045.aspx

ご覧のように、MSDNは

アンダースコア、ハイフン、またはその他の英数字以外の文字は使用しないでください

4
Alex

あなたの同僚は元VB開発者ですか? VB.Netでは、アンダースコアはプロパティまたはクラスのプライベートメンバーに対して定期的に使用されます。 VBは大文字と小文字を区別しないため、大文字と小文字を区別することはできません。

Private _someValue As Boolean
Protected Property SomeValue() As Boolean
    Get
        Return _someValue
    End Get
    Set(ByVal value As Boolean)
        _someValue = value
    End Set
End Property

更新:余談ですが、.NETソースコードの多くのクラスはこの規則を使用しています。特に System.Web で。

3
James Lawruk

大文字と小文字の変更を使用して、フィールドとプロパティを区別します。

// A private field
private Boolean someValue;
// A public property, exposing my private field
public Boolean SomeValue {
    get { return someValue; }
    set { someValue = value; }
}
3
Otiel

2つの一般的な規則があります。

1つ目は「フィールドマーカーとしてのユーザーアンダースコア」、2つ目は「静的フィールドにはs_を使用し、インスタンスフィールドにはm_を使用」です

これは宗教的な質問であり、両方のスタイルを混同しないことだけが重要です。

この本には、コンベンションとデザインのガイドラインに関する多くの優れたアイデアが含まれています

http://www.Amazon.de/Framework-Design-Guidelines-Conventions-Development/dp/0321545613/ref=sr_1_1?ie=UTF8&qid=1320395003&sr=8-1

2
Boas Enkler

人々が従う多くの命名規則があります

myFirstVar = Camel Notation

ラクダ記法は一般に、(プライベート変数ではなく)パブリック変数に使用されます。

MyFirstVar = Pascal Notation

Pascalは通常、クラスとメソッドの命名に使用されます。

str_MyFirstVar = Hungarian Notation // if variable is of type string

ハンガリー記法は最も古いと考えられていますが、現在では使用されていません。

_myFirstVariable = used for private fields in general
1
Sandy

StyleCop [Microsoftによるスタイル/規約チェックツール]によると、これは実行すべきではありません。参照: http://stylecop.soyuz5.com/SA1309.html

また、質問は アンダースコアにするか、アンダースコアしないか、という質問の可能性があります

1
Ron Sijm