3

メソッドよりもプロパティを優先する必要があるのはいつですか?次のコードは、プロパティを使用すると読みやすくなるためです。

string agency = base.GetAgencyDetails();

string agency = base.Agency; //I could write same logic in getter of the property.
4

5 に答える 5

11

個人的には、これに関するMSDNガイドラインに従います。

一般に、メソッドはアクションを表し、プロパティはデータを表します。プロパティは、フィールドのように使用することを目的としています。つまり、プロパティが計算上複雑になったり、副作用が発生したりしないようにする必要があります。次のガイドラインに違反しない場合は、メソッドではなくプロパティの使用を検討してください。経験の浅い開発者は、プロパティの方が使いやすいと感じています。

考えてみれば、それは完全に理にかなっています。メソッドは、何らかの方法でデータを変更する可能性のあるものに適しています。プロパティは、データを取得してキャッシュする場合に最適です。

明示的に裏付けられたプロパティを使用している場合は、変換の場合に2つを組み合わせることもできます。

private ObjType _myObjWithStringification;
private string _stringRepOfData;

public string StringRepresentation
{
    get {
        if (_stringRepOfData == null) {
            _stringRepOfData = _myObjWithStringification.ToString();
        }
        return _stringRepOfData;
    }
}

Re:保守性に関するコメントですが、それが非常に有効かどうかはわかりません。F12使用しているプロパティの宣言に移動するためにヒットしたget場合は、メソッドを使用した場合にメソッド本体に移動するのと同じように、とにかくterに直接移動します。

プロパティにカスタム取得ロジックがないことを想定しても安全かどうかはわかりません。

于 2013-03-01T18:15:11.920 に答える
2

多くのロジックを作成する必要がある場合は、プロパティではなくメソッドを作成します。

ロジックでメソッド呼び出しを行う場合は、プロパティではなくメソッドを繰り返します。

于 2013-03-01T18:14:36.767 に答える
0

ここにリンクの説明を入力してください

一般に、メソッドはアクションを表し、プロパティはデータを表します。プロパティは、フィールドのように使用することを目的としています。つまり、プロパティが計算上複雑になったり、副作用が発生したりしないようにする必要があります。次のガイドラインに違反しない場合は、メソッドではなくプロパティの使用を検討してください。経験の浅い開発者は、プロパティの方が使いやすいと感じています。

于 2013-03-01T18:15:35.480 に答える
0

プロパティは、バッキングフィールドの周りのラッパーメソッド(get / set)のセットです。

推奨される方法は、外部コントラクトが変更されないようにプロパティを使用することですが、後でプロパティメソッドにロジックまたは検証を追加することもできます。

また、ボーナスとしてコードをよりクリーンにします。

于 2013-03-01T18:16:15.147 に答える
0

それらのコアプロパティは、フィールドアクセスのラッパーであり、通常のフィールドと計算されたフィールドを統合することを目的としています。フィールドアクセスに類似した操作は、可能な場合はプロパティとして表す必要があります。

これは絶対的なルールではなく、ガイドラインです。メソッドのプロパティとなるものについて明確なルールを作成するのは困難です。ただし、その逆は当てはまりません。プロパティよりもメソッドを優先する必要がある場合は非常に明確です。

  • 操作は、タイプに目に見える副作用があります。たとえば、オブジェクト内の状態を視覚的に変更する場合、操作はプロパティであってはなりません。
  • 高価な操作を含む長時間実行される操作は決してプロパティであってはなりません
于 2013-03-01T18:19:29.417 に答える