私の知る限り、プロパティはアクセサメソッド風の機能を提供するために使用されます。ただし、通常のメソッド継承動作を犠牲にしてこれを行います。従来のセッター/ゲッターメソッドと比較して、プロパティを使用することに利点はありますか?プロパティとアクセサメソッドの長所/短所は何ですか?
2 に答える
混乱するかもしれません。あなたの例では、上記のメソッドにアクセスできる必要があります。たとえば、このタイプのセットが与えられた場合、次のように機能するはずです。
public class Base
{
public virtual int Datum { get; set; }
}
public class Derived : Base
{
public override int Datum
{
get { return 12; }
// set method remains as normal, with just the get overriden
}
public void SetDatumMethod(int newValue)
{
Datum = newValue; // Datum as a property is still accessible
}
}
派生クラスは引き続きプロパティを継承します。set_Datum(int x)
コンパイラーが生成しget_Datum()
、バックグラウンドでメソッドを使用するため、プロパティは実際にはC#では(ほとんど)構文上の糖衣構文にすぎません。上記のように、プロパティのget/setメソッドを個別にオーバーライドすることもできます。
プロパティを使用する利点は、プロパティに追加のセマンティックな意味があることです。それらは、データを生成する方法ではなく、何らかの方法でデータを「含む」または「表す」ものです。
Visual Studioデバッガーは、オブジェクトを監視するときにgetterメソッドを実行します。つまり、プロパティアクセサは予測できない時間に実行されるため、識別可能な副作用を引き起こすことはありません。プロパティを悪用すると、バグの解決が困難になる可能性があります。
メソッドを使用するもう1つの理由は、注文検索がパラメーター化される可能性が高いことです。
プロパティへのアクセスを計算上安価にすることをお勧めします。クライアントコードは、プロパティ値をローカル変数に配置するように強制されるべきではありません-それは時期尚早の最適化です。