49

名前を付けたい変数があるとしましょうFubar

FubarそれがString!だとしましょう。

つまり、Fubar を次のように定義します。

public string Fubar;

ここで、getter と setter が必要だとしましょうFubar(つまり、C# プロパティになりたいとします)。

private string Fubar;
public string Fubar_gs
{
    get
    {
        //Some fancy logic
        return Fubar;
    }
    set
    {
        //Some more fancy logic
        Fubar = value;
    }
}

いいですね!PROPERTY に元の変数ではなく、Fubar という名前を付けたい場合はどうすればよいでしょうか?

明らかに、両方の変数の名前を変更するだけです。しかし問題は、元の変数に最適な名前は何でしょうか?

この状況の命名規則はありますか?

4

12 に答える 12

138

Microsoftの命名規則によると、適切な方法は次のとおりです。

private string fubar;
public string Fubar { get { return fubar; } set { fubar = value; } }

ただし、多くの人は、プロパティを使用するつもりだったときにフィールドを誤って大文字にして使用する可能性を最小限に抑えるために、プライベートフィールドの前にアンダースコアを付けることを好みます。

したがって、次のように表示されるのが一般的です。

private string _fubar;
public string Fubar { get { return _fubar; } set { _fubar = value; } }

あなたが取るアプローチは最終的にあなた次第です。StyleCopはデフォルトで前者を強制しますが、ReSharperは後者を強制します。

getC#6には、プロパティのデフォルト値を宣言したり、読み取り専用プロパティを作成したりするための新しい構文があり、メソッドに特別な追加ロジックがないバッキングフィールドを持つプロパティの必要性が少なくなりsetます。あなたは単に書くことができます:

public string Fubar { get; set; } = "Default Value";

また

public string Fubar { get; } = "Read-only Value";

于 2012-08-20T21:54:15.260 に答える
8

private の前にアンダースコアを付ける _fubar

良いガイドとして、Microsoft の標準命名ガイドラインを超える CLR ランタイム チームのコーディング スタイル ガイドを使用できます。

https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/coding-style.md

于 2012-08-20T21:50:25.910 に答える
7

プライベート変数に小文字で名前を付ける場合は、それらを右クリックして、VSにゲッター/セッターコードを生成させることができます。

リファクタリング->フィールドの暗号化...

プロパティにCapsという名前が付けられます。

于 2012-08-20T21:54:35.760 に答える
6

ゲッター/セッターにロジックがない場合は、自動プロパティを使用します。

public string Fubar {get; set;}

http://msdn.microsoft.com/en-us/library/bb384054.aspx

于 2012-08-20T21:51:56.270 に答える
2

C#の方法は

private string _fubar;
public string Fubar
{
    get
    {
        return _fubar;
    }
    set
    {
        _fubar = value;
    }
}

ただし、それが追加のロジックのない単なる基本的なゲッター/セッターである場合は、次のように書くことができます

public string Fubar { get; set; }

バッキング変数などは必要ありません。

于 2012-08-20T21:51:45.007 に答える
2

コーディング標準の良いところは、選択できるものが非常に多いことです。

自分に合った規則を選び、それを一貫して使用してください。

Microsoft の規則 — pascalCase プライベート フィールドと CamelCase プロパティは整然としていますが、タイプミスが原因でバグが発生する可能性があります。名前を入力するたびに2つの追加のキーストロークが必要になるため、最初のアンダースコア規則は面倒ですが、タイプミスはそれほど多くありません(または少なくともコンパイラーが最初にキャッチします)。

于 2012-08-20T23:14:50.790 に答える
1

デフォルト値で宣言する別の方法

    private string _fubar = "Default Value";
    public string Fubar
    {
        get { return _fubar; }
        set { _fubar = value; }
    }
于 2015-05-21T02:32:09.423 に答える
0

時代遅れの回答(およびC#6を表す非標準の方法)がたくさんあるので、これは2020年のものです:

// "fubar" works, too, but "_" prevents CaSe typo mistakes
private string _fubar;
public string Fubar
{
    get => _fubar;
    set => _fubar = value;
}

// Read-only can just use lambda to skip all those shenannigans
public string ReadOnlyFoo => "This is read-only!";
于 2020-03-14T13:48:27.670 に答える