2011-01-11 7 views
2

のスタイルとパフォーマンスをコーディング。たとえば、:は、プロパティ

public void DoSomething() 
{ 
    if(mSomeNumber == 0) // This way? 
    //if(SomeNumber == 0) // Or this way? 
    { 
     // Do something 
    } 
} 

メンバー変数を直接使用するとコールが保存される可能性がありますが、プロパティが同じものにコンパイルされるかどうかは疑問です。それが「標準」とは何か、あるいは「標準」とは何かを知っていますか?

答えて

4

回避策の具体的な要件がない限り、プロパティを使用する必要があります(例:Henk's answer)。

こうすることで、呼び出し元コードを変更せずにプロパティゲッターの機能を変更することができます。たとえば、getterはより綺麗な戻り値 の値を書式設定するか、定数 でインクリメントします。または、入れ子オブジェクトなどのどこから他の状態を折り返しているかなどです。

+1

getterの値の増分が悪いと聞いたことがありますが、あなたは何を得ているのか、良いアドバイスを得ています。 – SwDevMan81

+0

ゲッターがちょうど他の場所から(ネストされたオブジェクト内の)状態を折り返しているかどうかの別の例があります。 – Reddog

+1

ヤック、その答えを編集してください。状態を変更するプロパティゲッターは、デバッガウォッチ式の災害です。 –

4

これらの日、私たちは行います

public int SomeNumber 
{ 
    get; 
    private set; 
} 

だから我々は、プライベートメンバフィールドを宣言する気にする必要はありません。

メンバーフィールドを宣言して直接アクセスする(おそらく最適化された)プロパティ呼び出しを保存しますが、プロパティが提供するように設計されたチェックと残高を忘れてしまいます。

+2

ええ、あなたの設定者は、プロパティの変更通知やその他の検証が必要な場合があります。その後、プライベートメンバーフィールドを持つことに戻ります。 –

+0

必ずしもそうではありません。 __ –

+0

'INotifyPropertyChanged'を実装する必要がある場合はどうしますか? – Femaref

0

プロパティの使用ベストプラクティスと考えられ、一般的に.netとC#の世界の標準的なものです。これは、公共契約のフィールドではなくプロパティの使用と同じ利点があります。

受け取ったメリットは、Jon Skeet氏の記事「Why Properties Matter」に記載されています。

1

もしあれば、その差は非常に小さくなります。だから、 'パフォーマンス'の角度からそれに近づくのは間違っています。このメンバーをあまりにも使用してしまったのであれば、それはまったく違うものにするべきでしょう。

したがって、主な基準は読みやすさと信頼性です。これは、プロパティを使用し、関係する(将来の)ビジネスロジックを使用することを意味します。

(妥当性検査のルールや通知の変更を避けるなど)まれな状況でのみバッキングフィールドを使用します。

これはまれであるため、@ Fredericの回答のように、通常、バッキングフィールドなしで行うことを意味します。

0

このプロパティはほとんど常にJITによってインライン展開されるため、パフォーマンスに差が生じることはありません。

フレデリックの返信のように、元のケースと同じようにバッキングフィールドを宣言するか、自動プロパティを使用するかには全く違いはありません。どちらのケースにもバッキングフィールド(自動ケースでは隠しフィールド)があります。

プロパティのベネフィットについては、他のasnwersをお読みください。