12

重複の可能性:
プロパティとメソッド

多くの場合、何かがプロパティであるかメソッドであるかは明らかですが、あいまいと見なされる可能性のある項目があります。

明らかなプロパティ:

  • "名前"
  • "長さ"

明らかな方法:

  • "メッセージを送る"
  • 「印刷」

あいまい:

  • 「有効」/「IsValid」/「検証」
  • 「InBounds」/「IsInBounds」/「CheckBounds」
  • "AverageChildValue" / "CalcAverageChildValue"
  • 「ColorSaturation」/「SetColorSaturation」

あいまいな方法に傾倒すると思いますが、これを決定するのに役立つ規則や規則を知っている人はいますか?たとえば、すべてのプロパティをO(1)にする必要がありますか?プロパティが他のデータを変更できないようにする必要がありますか(ColorSaturationはR、G、B値を変更する可能性があります)?計算や集計がある場合、それはプロパティではありませんか?

学術的な観点からだけで(そしてそれが良い考えだと思うからではありません)、プロパティに夢中にならず、議論をせずにクラスの尋問であるすべてのものを作成する理由があります。単一の引数を持つクラスで失敗することはできません、プロパティ?

4

6 に答える 6

10

次のいずれかの動作がある場合、通常、プロパティを関数に変換します

  • 副作用を引き起こします(バッキングフィールドの設定以外)
  • フィールドアクセスと比較すると、実装にはコストがかかります
  • 実装はLog(N)よりも複雑です
  • 例外をスローできます
于 2010-03-12T23:01:37.510 に答える
5

私はこれについていくつかの興味深いテキストを見つけました

MSDN | プロパティとメソッド

編集

それは次のようなことを言います:

次の場合にプロパティを使用する

  • メンバーは論理データメンバーです

次の場合にメソッドを使用する

  • 操作は、Object.ToStringなどの変換です。
  • 操作は十分に費用がかかるため、結果のキャッシュを検討する必要があることをユーザーに伝えたいと考えています。
  • getアクセサーを使用してプロパティ値を取得すると、観察可能な副作用が発生します。
  • メンバーを2回続けて呼び出すと、異なる結果が生成されます。
  • 実行の順序は重要です。タイプのプロパティは、任意の順序で設定および取得できる必要があることに注意してください。
  • メンバーは静的ですが、変更可能な値を返します。
  • メンバーは配列を返します。配列を返すプロパティは、非常に誤解を招く可能性があります。
  • 通常、ユーザーが内部状態を変更できないように、内部配列のコピーを返す必要があります。これは、ユーザーがそれがインデックス付きのプロパティであると簡単に想定できるという事実と相まって、非効率的なコードにつながります。
于 2010-03-12T23:02:26.450 に答える
4

もう1つの考慮事項は、バインド可能性です。ほとんどのフレームワークは、プロパティにのみバインドできます。たとえば、IsValidをバインディングで使用できるようにする場合(たとえば、[OK]ボタンのIsEnabledプロパティのバインディングソースとして)、メソッドではなくプロパティである必要があります。

于 2010-03-12T23:07:03.877 に答える
1

プロパティとメソッドのどちらを使用するかを決定する際には、メソッドに含まれる作業量も考慮する必要があります。つまり、値を取得するのが比較的安価である場合はプロパティにし、コストがかかる場合はメソッドにします。

于 2010-03-12T23:01:26.333 に答える
0

すでに持っているものから何かを計算できる場合は、メソッドを使用します。値を操作したり、他の何かを計算したりするための基礎にする必要がある場合は、プロパティである必要があります。

たとえば、特定のユーザー入力が最新であるかどうかを確認し、独自の特許取得済みアルゴリズムでそれを実行できる場合は、methodを使用しますValidate()。ユーザーがフォームを送信するだけの場合は、現在のアドレスが有効であるため、プロパティを使用しますvalid。しかし、それはあなたが実際に何を望んでいるかによって変わるかもしれない単なる一般的なアプローチです。

于 2010-03-12T23:09:08.827 に答える
0

私は個人的に複雑さと方法/プロパティが何をするかについて選択します。値を設定するだけの場合、つまり_name = something;の場合は、プロパティを使用します。非常に基本的な計算や条件付きステートメントを実行する場合でも、プロパティを使用します。しかし、何か深刻な作業や中程度の作業が必要になる場合は、方法を使用します。プロパティを設定することほど私を苛立たせるものはなく、突然、予想よりも多くのコードが実行されます。

于 2010-03-12T23:38:10.523 に答える