web-dev-qa-db-ja.com

プライベートメンバー変数のC#コーディング標準

プライベートメンバー変数のコーディング標準の2つの一般的なアプローチを見ました。

class Foo
{
    private int _i;
    private string _id;     
}

そして

class Foo
{
    private int m_i;
    private string m_id; 
}

後者はC++から来ていると思います。また、多くの人はメンバー変数の前に型を指定します(例:double m_dVal)double型の非定数メンバー変数であることを示しますか?

C#の規則は何ですか?

29
Sasha

あなたが言及する2つに加えて、プライベートメンバーのプレフィックスを持たないことはC#では非常に一般的です。

class Foo
{
    private int i;
    private string id; 
}

それが私が使用するものであり、また Microsoftの内部命名ガイドライン で推奨されているものでもあります。

61
driis

Brad Abrams:内部コーディングガイドライン

メンバー変数にプレフィックスを使用しないでください(_m_s_など)。ローカル変数とメンバー変数を区別する場合は、「this.」はC#で、「Me.” VB.NETで。

14
Mehrdad Afshari

ここで重要な原則は、あなたが一貫しているということです。 「_」または「m」のプレフィックスを使用するのは、それがやりたいことであり、作業中の残りのコードと一貫性がある場合です。何を選んでも、それを守り、一貫性を保ってください。

14

最初の例を使用するか、クラスでプライベートフィールドを定義しないようにする自動プロパティを使用することをお勧めします。

public String MyString { get; set; }

propスニペットを使用して、これらを本当に高速にします。

10
Daniel Schaffer

Framework Design Guidelines を読んだことを思い出すと、ハンガリーの表記法を使用してはならず、変数名の最初の文字を大文字にしない(Camelを使用してはならない)ことを除いて、プライベートメンバー変数の設定規則は実際にはありません-ケーシング)。本には、両方の例をサポートする引用符があり、接頭辞をまったく使用していません。

個人的には、「m_」プレフィックスを好みます。

7
AJ.

Microsoftからの一般的なガイダンスはこちら:

http://msdn.Microsoft.com/en-us/library/ms229002.aspx

C#の自動プロパティは優れており、可能な場合は使用しますが、setメソッドで型または値のチェックを行う場合など、機能しない場合があります。

一般に、キャメルケーシングを使用し、アンダースコアやタイププレフィックスなどの名前をプレフィックスに付けないでください。

public int Age {get; set;}

または

private int age;
public int Age
{
    get { return age; }
    set
    {
        if(value < 0)
            throw new InvalidOperationException("Age > 0");
        age = value;
    }
}
6
andleer

私は常にあなたの最初の例を使ってきました:

    public class Foo
    {
        private int _i;
        private string _id;
    }

実際、それは私のチーム全体が使用するものです。さらに、あなたが言及したものm_dValはハンガリー記法として知られています。ここに Wikipedia Entry があります。ハンガリー記法は実際にはチームのコーディング標準に違反しているため、私は決して使用しません。

5

プロジェクトで既に使用されているものを使用するのが最善です。新しいプロジェクトを開始する場合は、会社で最も頻繁に使用されているものをすべて使用します。

4
ibz

プライベートの非const非読み取り専用フィールドのプレフィックスとしてアンダースコアを使用します。どうして?理由:1.変数を見るだけで、フィールド変数とローカル/パラメーター変数を区別できます。 「これ」を使用してすべてのフィールドのオプションではありません-その長い。 2.パラメーターとフィールドにはあいまいさがあります。

class Foo
{
  private int id;
  public Foo(int id)
  {
    id = id; //Will compile and work fine. But field will not be initialized.
  }
}
3
Aleksei

メンバー変数にプレフィックスをまったく使用しないことを好みます。メソッドの外部で宣言されたものについては、「this.memberVariableName」を使用して、メソッドの内部で宣言されたものと区別します。

2
cyclo

私は最初の慣例である単純なアンダースコアを使用する傾向があります。また、名前にタイプを指定しません。Intellisenseに、それが何であるかを教えてくれるからです(松葉杖になります)。

同僚やプロジェクトのチームメイトに確認し、コンベンションを決定するのが最善です。その一部はarbitrary意的です。

1
Jon Dewees

_で始まるC++識別子は悪い習慣と見なされており、内部で使用するために残しておく必要があります。これが、C#でも変数名の前に_を付けることが悪い習慣であると考えられる理由だと思います... C/C++とは異なり、。標準ライブラリ。

0
jheriko