あなたは、クラス自体の中からデータメンバーやパブリックプロパティを使用していますか?
-
21-08-2019 - |
質問
私はこのような単純なクラスを設定している場合:
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...
}
}
私が使用すべき、公共の財産、またはデータメンバ?
どちらもちょうど同じ変数を参照するため、もちろん、この例では、違いはありません。しかし、現実の世界について何のことはパブリックプロパティを使用しています!
一般的には、パブリックプロパティは、それらを呼び出すためにOKである場合には、非常に小さな実行していますか?または人々は、内部クラス参照によって呼び出されるべきではありません彼らのパブリックプロパティに多くの機能を入れていますか?
私は、予期しない結果を実行することができますデバッガでそれらを調べるために、プロパティへの機能の多くを入れないことについて、別の記事で何かを見ました。それは本当ですか。
解決
プロパティを使用 - セッターとゲッター内に封入することができる任意のロジックであっても、クラス自体の中に、適用するべきです。ゲッターとセッター内にはロジックがない場合は任意の時点で、あなたは多くをリファクタリングする必要がありますそれらのフィールドへのアクセスを中心にロジックを追加したい場合ので、まだフィールドに自分自身を使用しても安全ではありません。
他のヒント
私は、あなたが一般的な慣行としてプロパティを参照すべきであると考えています。この特定の例では、それは本当に大きな違いがありませんが、取得/設定アクセサは、プロパティをつかんとき、もう少し仕事をする能力を提供します。たとえば、私たちの財産の多くは、アクセサは、より複雑なデータ構造内のいくつかの検索を実行したり、何も定義されていない場合、デフォルト値を設定し、「取得します」。クラスの残りの部分は、このロジックを活用することができるように、我々は、プロパティを使用しての習慣を作ります。ただ、私たちは私たちが練習を一般化しようとし、それについてあまりにもハード考える必要はありません。
私たちは、直接基礎となるデータメンバにアクセスしたいインスタンスがあるかもしれませんが、その後それは特定の理由で意識的な決定であり、それは例外である傾向がある。
彼らは簡単に読み取り専用の状況を扱うので、私はプロパティを好む、それはあなたがする必要がある可能性のある基本的な検証でそれらをラップするのは簡単です。
私はちょうど内部変数の値を返すんだ場合、私は変数公開し - そうすることに害はありません。すなわち、それをデータベースに書き込み、(あなたの例の第二の部分のように)あまりにも何かを設定する< - 私は私が表示または値の変更のいずれかに応答して、何かをしたいときは、常にパブリックプロパティを使用しました。 / P>
あなたが聞いている質問は、あなたがこれらのイベントをトリガするために、あなたのクラスの内部で何が起こるかするかどうかです。そうした場合、同じように外部の発信者は、その後、プロパティを経由して値にアクセスします。あなただけの値を読みたい場合は、内部変数を使用します。
あなたの質問に答えるために、それをいずれかの方法をやってに害がありません - 。潜在的な副作用のちょうど考慮に