web-dev-qa-db-ja.com

C#静的フィールドの命名規則とは何ですか?

最近、素晴らしいツールであるReSharperを使い始めました。今日、静的フィールドの命名規則に出会いました。つまり、アンダースコアを前に付けます。

private static string _myString;
  1. これは本当に静的変数に名前を付けるための標準的な方法ですか?もしそうなら、それは単なる個人の好みとスタイルですか、それとも何らかの下位レベルの影響がありますか?例えばコンパイルJITなど?
  2. このスタイルはどこから来たのですか?私は常にC++に関連付けていますが、それは正しいですか?
35
Matt

マイクロソフトのガイドラインはプライベートフィールドについては触れていません。彼らは公に見えるメンバーにのみ関係しています。

一般的な規則は、キャメルケース、_camelCase、およびC++/MFC m_camelCaseからの二日酔いです。

プレフィックスなしでcamelCaseを使用する場合、プロパティバッキングフィールドはプロパティ名とのみ異なります。これはC#では問題ではありませんが、VB.NETなどの大文字と小文字を区別しない言語では機能しません。

私を含む多くの人々は、すべての言語で同じ標準を使用できるように、アンダースコアのプレフィックスを使用することを好みます。私の経験では、アンダースコアはm_よりもはるかに一般的です。

25
Joe

[〜#〜] msdn [〜#〜] によると、静的フィールドには Pascal Case を使用します。 MSDNとStyleCopが互いに矛盾するときはいつも笑います:)。

したがって、MSDN標準に従っている場合、正しい方法は次のとおりです。

private static string MyString;
24
dcp

StyleCopによると (およびデフォルトの設定)では、ほとんどのフィールドに名前を付ける正しい方法(以下で指定)は、先頭に小文字を使用します。

SA1306:FieldNamesMustBeginWithLowerCaseLetter

...フィールドと変数の名前は、フィールドがパブリックまたは内部、const、または非プライベートで読み取り専用でない限り、小文字で始める必要があります。このような場合、フィールドは大文字で始まる必要があります。

SA1309:FieldNamesMustNotBeginWithUnderscore も参照してください。

15
Mark Rushakoff

これは、実際にはprivateフィールドのスタイルであり、静的であるかどうかは関係ありません。 (少なくともReSharperでは)

11
Aren

規約は、会社のコーディング標準が言うとおりです。

6
Muad'Dib

MSDNガイドライン(Pascalの場合を使用)で私が抱えている問題は、プライベート静的変数とパブリック(非静的)プロパティの間に区別がないということです。同じ問題が静的プロパティでも発生します-静的と非静的の区別はありません。

おそらくこれは意図的なものですか?

これを回避する1つの方法は、静的でないものと同じ標準を静的に使用することですが、クラス名を前に付けることにより、常に静的の使用を修飾します。入力する文字が少し増える場合がありますが、コードが読みやすくなります。例えば:

public class Employee
{
    private static Int32 thresholdPercentage = 5;
    public static String TooMuchMessage = "Unacceptable pay rise - sorry!";

    private Decimal _salary = 0.0m;

    public void RaiseSalary(Int32 raiseAmountPercentage)  
    {
        if (raiseAmountPercentage > Employee.thresholdPercentage)
            throw new ApplicationException(Employee.TooMuchMessage);

        _salary *= 1 + (raiseAmountPercentage / 100);

        return;
    }
}
4
Adrian Hall

static fieldsの場合、StaticPascalCase(例:StaticPersonCache)を使用して、インスタンス変数と明確に区​​別できるようにしました。これにはprivate static fieldsだけでなく、他の可視性修飾子を持つ静的フィールドも含まれます。

静的変数の場合、変数がインスタンス間でどのように動作するかを示すことよりも、名前を介してパブリック/プライベートの可視性を示す方が私にとって問題ではありません。また、Static変数は多くないので(そうすべきではありません)、「Hugarianのような」修飾子はあまり適用されません。

同様に、thread-static変数([ThreadStatic]またはThreadLocal)の場合、私が使用する規則はTS_UpperCamelCaseです(例:TS_Random)。繰り返しになりますが、この規範からの「脱却」は、他の開発者が一見して見落とす可能性がある非常に重要な情報を伝えます。したがって、名前は一種の警告フラグとして使用されます。

私はReSharperを使用しており、それに応じて警告/ヒントを調整しています。他のほとんどの命名規則は、ReSharperのデフォルト設定のままです。

static/thread-static fields(注:Microsoftは.NETライブラリの一部のコードでTS_を使用しています)に対するこのような「非標準」の規則を選択したのは、複数の「癖」に遭遇したためです'Static/ThreadStatic/Instance変数の誤認のため:StaticXTS_X、および_xを使用するのははるかに困難です。

2
user2864740

ここでの他の答えは少し混乱しています。

。NET標準 から:

フィールド名にはPascalCasingを使用してください。
フィールドの命名ガイドラインは、静的なパブリックフィールドと保護フィールドに適用されます。

したがって、例はMyStaticVariable、ActiveUserCountなどになります。

1-変数名の明確な標準規則はありません。許可されるものと許可されないもの(つまり、数字で始めることはできない)にはC#コンパイラーの要件がありますが、プログラミング言語スタイルのルールは、一般にプログラマー/組織に任されています。 ReSharperには定義済みのスタイルルールがあります。ただし、それらは、構成アプローチよりも規約のデフォルトとして設定されているだけであり、変更可能です。

2-このウィキペディアの記事を見て、その背後にある歴史を見ることができます Camel Casing

0
JD Courtoy