2009-04-08 10 views
0

より短いコードのようなパフォーマンス上の利点、少ないメモリ使用量などを除けば、プロパティを扱うための「新しい」短期間の方法にはどんなメリットがありますか?プロパティを定義する "新しい"方法の利点や欠点はありますか?

public string StrVariable { get; set;} 

よりもむしろ

private string strVariable; 

public string StrVariable 
{ 
    set 
    { 
     strVariable = value; 
    } 
    get 
    { 
     return strVariable; 
    } 
} 

を書き込み、任意の欠点がある - おそらくいくつかのコードを主張するだろうがあまり明確な、読み少ないのですか?あなたが取得/設定ルーチンで何かを行いたい場合は、私が見ることができる

答えて

4
+0

ありがとうございました。誰かが既に質問をしているが、見つからなかったと確信していました。 SO検索で見つけにくいのは私だけですか? –

+0

いいえ、複数のキーワードを検索しても、関連性の高い順番はないようです。また、あなたが見上げようとしているものの名​​前がわからないときは、それを難し​​くします。 – Brandon

0

一つの欠点はあります。カウンターやそのようなものを増やしてください。入力していない場合は、入力を検証することもできます。

+0

このシナリオでは、単に明示的に切り替えるだけです。私はOPが単純なパススルーの場合を指していると信じています。 –

3

特定のシナリオでという大きな欠点が1つあります。 - フィールド名の制御が失われます。これは重要ではないかもしれませんが、BinaryFormatterを使用してバイナリシリアル化を使用している場合はis a big problemとなります。

他のもの:

彼らは、しかし、やるん

  • 彼らはstruct秒間フィールドレベルでreadonly
  • することはできませんが、カスタムコンストラクタで: this()を呼び出す必要があります99%のケースで素晴らしい仕事をしています。コードをきちんと表現しますが、後で(明示的なフィールドに切り替えることによって)追加の実装の詳細を追加することができます。

+0

正しく覚えていれば、WCFによるSOAP書式設定にも影響があります。 –

+0

WCFは通常、影響を受けないDataContractSerializerを使用します.SoapFormatterは非推奨ですが、はい:BinaryFormatterと同じです。 –

0

コレクションのプロパティも1つの問題です。自動プロパティでは初期化されません。

例:

public class foo 
{ 
    public List<String> S1 { get; set; } 

    private List<string> s = new List<string>(); 
    public List<String> S2 
    { 
     get { return s;} 
     set { s = value; } 
    } 
} 

foo f = new foo(); 
f.S1.Add("thing"); 
f.S2.Add("thing"); 

f.S1.Addはnullref除いて爆撃します。

関連する問題