メソッドよりもプロパティを優先する必要があるのはいつですか?次のコードは、プロパティを使用すると読みやすくなるためです。
string agency = base.GetAgencyDetails();
string agency = base.Agency; //I could write same logic in getter of the property.
個人的には、これに関するMSDNガイドラインに従います。
一般に、メソッドはアクションを表し、プロパティはデータを表します。プロパティは、フィールドのように使用することを目的としています。つまり、プロパティが計算上複雑になったり、副作用が発生したりしないようにする必要があります。次のガイドラインに違反しない場合は、メソッドではなくプロパティの使用を検討してください。経験の浅い開発者は、プロパティの方が使いやすいと感じています。
考えてみれば、それは完全に理にかなっています。メソッドは、何らかの方法でデータを変更する可能性のあるものに適しています。プロパティは、データを取得してキャッシュする場合に最適です。
明示的に裏付けられたプロパティを使用している場合は、変換の場合に2つを組み合わせることもできます。
private ObjType _myObjWithStringification;
private string _stringRepOfData;
public string StringRepresentation
{
get {
if (_stringRepOfData == null) {
_stringRepOfData = _myObjWithStringification.ToString();
}
return _stringRepOfData;
}
}
Re:保守性に関するコメントですが、それが非常に有効かどうかはわかりません。F12使用しているプロパティの宣言に移動するためにヒットしたget
場合は、メソッドを使用した場合にメソッド本体に移動するのと同じように、とにかくterに直接移動します。
プロパティにカスタム取得ロジックがないことを想定しても安全かどうかはわかりません。
多くのロジックを作成する必要がある場合は、プロパティではなくメソッドを作成します。
ロジックでメソッド呼び出しを行う場合は、プロパティではなくメソッドを繰り返します。
ここにリンクの説明を入力してください
一般に、メソッドはアクションを表し、プロパティはデータを表します。プロパティは、フィールドのように使用することを目的としています。つまり、プロパティが計算上複雑になったり、副作用が発生したりしないようにする必要があります。次のガイドラインに違反しない場合は、メソッドではなくプロパティの使用を検討してください。経験の浅い開発者は、プロパティの方が使いやすいと感じています。
プロパティは、バッキングフィールドの周りのラッパーメソッド(get / set)のセットです。
推奨される方法は、外部コントラクトが変更されないようにプロパティを使用することですが、後でプロパティメソッドにロジックまたは検証を追加することもできます。
また、ボーナスとしてコードをよりクリーンにします。
それらのコアプロパティは、フィールドアクセスのラッパーであり、通常のフィールドと計算されたフィールドを統合することを目的としています。フィールドアクセスに類似した操作は、可能な場合はプロパティとして表す必要があります。
これは絶対的なルールではなく、ガイドラインです。メソッドのプロパティとなるものについて明確なルールを作成するのは困難です。ただし、その逆は当てはまりません。プロパティよりもメソッドを優先する必要がある場合は非常に明確です。