7

auto プロパティを知って以来、あらゆる場所で使用するようにしています。クラス内で使用するすべてのプロパティに常にプライベートメンバーが存在する前に。現在、これは auto プロパティに置き換えられています。通常のメンバー フィールドを使用する方法で、クラス内でプロパティを使用します。問題は、プロパティがキャピトルで始まることです。これにより、この方法で使用すると少し奇妙に見えます. プロパティは常に「ドット」の後ろにあるため、以前はプロパティがキャピトルで始まることを気にしませんでした。今ではthis.、自分の気持ちを落ち着かせるために、内部で使用するすべてのプロパティの前に を付けていることに気付きました。

this.私のジレンマは、「必要」でない限り(セッターやコンストラクターのように)、内部メンバーのすべての使用に接頭辞を付けることに常に少し反対していたことです。だから私はこれについてセカンドオピニオンを探しています。これを行うための標準的な良い方法はありますか? 不平を言うのはやめた方がいいですか (私は「アリ ハンパー」(オランダ語の表現) になる傾向があります)。

前:

class Foo
{
    private Bar bar;
    public Bar Bar { get { return bar; } }

    public Foo(Bar bar)
    {
        this.bar = bar;
    }

    public void DoStuff()
    {
        if(bar != null)
        {
            bar.DoMethod();
        }
    }
}

後:

class Foo
{
    public Bar Bar {get; private set;}

    public Foo(Bar bar)
    {
        this.Bar = bar;
        // or
        Bar = bar;
    }

    public void DoStuff()
    {
        if(this.Bar != null)
        {
            this.Bar.DoMethod();
        }
        // or
        if(Bar != null)
        {
            Bar.DoMethod();
        }
    }
}

アップデート

より多くの人が接頭辞を付けることを支持していますが、意見はさまざまであるようですthis.。auto プロパティの前は、コンストラクターやセッターの代わりに with をプレフィックスとして付けることに常に反対していthis.ました (前に述べたように)。でも今はそれしか分からない。

追加の注意: プロパティにクラスと同じ名前を付けるのも一般的であるという事実 ( public Bar Bar { get; private set; }) も、接頭辞を付ける傾向があります。と入力するたびにBar.DoMethod()、静的メソッドのように見えるように感じます。それが静的メソッドである場合、VSは色Barを付けますが、同じ署名を持つ静的メソッドとインスタンスメソッドを持つことはできません。色が付いている場合は静的メソッドであることが明らかですが、色が付いていない場合は静的メソッドではないことが 100% 明確ではありません。たとえば、ステートメントが欠落している可能性がありますが、using色付けされていないことを静的呼び出しであるかどうかにリンクする必要があることに慣れていないためでもあります。メンバーの場合は最初の文字の大文字化によって、またはプロパティの場合は「ドット」によって、すぐにそれを確認する前に (たとえば、「ドット」foo(Foo)foo.Bar.DoMethod())。

(現時点で「承認された回答」を選択することは困難です)

4

4 に答える 4

6

はい、「これを行う標準的な方法」があります。大文字と this プレフィックスは、優れたコーディング プラクティスと見なされます。ReSharperや Microsoft 独自のStyleCopなどのコーディング ガイドラインに従ってコードをテストするツールを使用する場合、this-reference を使用していない場合、またはプロパティを大文字で始めていない場合は警告が表示されます。

あなたのプロパティは公開されています。パブリック プロパティ、フィールド、またはメソッドはすべて大文字で始める必要があります。

読みやすくするために、そのクラスの一部である独自のクラス内で呼び出すプロパティ、フィールド、またはメソッドには、this-reference をプレフィックスとして付ける必要があります。

更新:もちろん、意見はさまざまです。プレフィックスなしで ctrl-space を押すだけですべてのキーワードを表示するのではなく、ヒットthis.してからドットの後にメンバーのみを表示するのが好きです。これは私を助けます。しかし、最後に(ここから引用):

あなたの意見がどうであれ、重要なことは、プロジェクトで密接に協力しているすべての人が、それらの標準が何であるかに関係なく、同じフォーマット標準を使用するということです.

その他の参考文献:ほとんどすべての名前と特にプロパティで
大文字を使用することに関する Microsoft 。
詳細なガイドラインはこちら.

于 2010-01-18T13:07:12.467 に答える
6

これを使用することを強くお勧めします' 可能であれば。Framework Design Guidelinesでは、この方法を推奨しています。読みやすさの観点からスコープを知ることができ、コンパイラがコンパイル時に報告する可能性のある愚かな間違いを避けるのに役立ちます。

于 2010-01-18T13:07:42.527 に答える
2

明確さを損なうだけなので、これを使用しないことを強くお勧めします。実際に衝突を避けるためにこれが必要な場合は、フィールド/プロパティ/変数のいずれかの名前を変更することをお勧めします。

私が許容できる唯一の場所は、それが公開された API の一部であり、名前を変更すると重大な変更が発生する場合です。

于 2010-01-18T13:11:31.050 に答える
1

最初の例では、パラメーターはインスタンスからフィールドをbar語彙的に隠します。barしたがってthis、曖昧さ回避のために使用する必要があります。

2 番目の例では、そのようなあいまいさがないため、明確化 (すなわちthis) は必要ありません。ただし、それがお茶のカップである場合は、前に付けることができます. :)

于 2010-01-18T13:07:45.833 に答える