2009-07-02 6 views
3

私はこのような単純なクラス設定している場合:私は使うべきクラス内からデータメンバーまたはパブリックプロパティを使用していますか?

class MyClass 
{ 
    private string _myName = string.Empty; 

    public string MyName 
    { 
     get 
     { 
      return _myName; 
     } 
    } 

    public void DoSomething() 
    { 
     // Get the name... 
     string name = string.Empty; 

     name = _myName; 

     // OR 

     name = MyName; 

     // ...and do something with it... 
    } 
} 

、公共の財産、またはデータメンバを?

明らかに、この例では、両方とも同じ変数を参照するだけなので、違いはありません。しかし、公共のプロパティの実際の使用はどうですか?

一般に、パブリックプロパティはほとんど実行されません。その場合、呼び出すことはできますか?あるいは、人々は公共クラスの参照によって呼び出されるべきではない、公共のプロパティに多くの機能を入れますか?

デバッガでそれらを調べると予期しない結果が発生する可能性があるため、プロパティに多くの機能を追加しないということについて別の投稿で何かを見ました。本当?

+0

[同じクラスのプロパティにアクセサに直接アクセスするにはどうすればよいですか?](http://stackoverflow.com/questions/355787/what-is-the-best-way-to -access-properties-from-same-class-by-accessor-or – nawfal

答えて

8

プロパティを使用します。クラス内であっても、セッターとゲッターの中にカプセル化されたロジックがあれば適用できます。ゲッターとセッターの間にロジックがない場合は、フィールド自体を使用することは安全ではありません。いつでも、それらのフィールドへのアクセスの周りにロジックを追加したい場合は、リファクタリングする必要があります。

+0

の完璧な答えです。 –

0

私が内部変数の値を返すだけであれば、変数をpublicにします。そうすることに害はありません。私は値の表示や変更に応じて何かをしたいときにPublic Propertiesを使いました。つまり、データベースに書き込んだり、別のものを設定したりします(例の2番目の部分のように)。

あなたが尋ねなければならない質問は、あなたのクラス内で何が起きてこれらの出来事が起こるかどうかということです。外部呼び出し元と同じ方法で、プロパティを使用して値にアクセスします。値を読み取るだけの場合は、内部変数を使用します。

あなたの質問に答えるには、どちらの方法でも問題ありません。潜在的な副作用を考慮してください。

+4

パブリックフィールドは悪い考えです。カプセル化を中断するクラスの状態の露出です。なぜこれは悪いのですか?そのフィールドの取得または設定の周りにロジックを追加したい場合はどうなりますか?フィールド自体を公開しているので、これを行うことはできません。 –

+0

ロジックを追加する必要がある場合は、後でパブリックフィールドをプロパティに変換できませんでしたか?誰かがパブリックプロパティを使用しているときに、必要がないときにはいつも私は不必要に思えました。余分なオーバーヘッドが追加されるようです。少なくともVBでは、「get-set」構文が素早く行われるわけではありません。そのため、プロパティにする価値があるよりも多くのコードが含まれているようです。私は間違っているとうれしいので、私を記入してください! – SqlRyan

5

私はあなたが一般的な慣習としてプロパティを参照する必要がありますと信じています。この特定の例では実際には大きな違いはありませんが、get/setアクセサはプロパティを取得するときにもう少し作業を行うことができます。たとえば、プロパティの「取得」アクセサの多くは、より複雑なデータ構造内で検索を実行したり、何も定義されていない場合はデフォルト値を設定したりします。クラスの残りの部分がこのロジックを利用できるように、プロパティを使用する習慣を作ります。ちょうど私達はそれについてあまりにも懸命に考える必要はありません、私たちは練習を一般化しようとします。

基本データメンバーに直接アクセスしたい場合がありますが、それは特定の理由で意識的な判断であり、例外的な傾向があります。

2

私はプロパティを優先します。読み取り専用の状況を簡単に処理し、実行する必要のある基本的な検証で簡単にラップすることができるからです。

関連する問題