これを読むと、「これは次の理由で悪い考えです...」などのアドバイスをしたくなるでしょう。
我慢してください。これにアプローチする他の方法があることを私は知っています。この質問は雑学と考えるべきです。
Invoice、Purchase Order、Sales Receipt など、すべてのトランザクションに共通のプロパティを持つクラス「Transaction」があるとします。
トランザクション「金額」の簡単な例を見てみましょう。これは、特定のトランザクションで最も重要な金額です。
public class Transaction
{
public double Amount { get; set; }
public TxnTypeEnum TransactionType { get; set; }
}
この Amount は、派生型でより具体的な名前を持つ場合があります...少なくとも現実の世界では。たとえば、次の値はすべて実際には同じものです。
- 取引金額
- 請求書 - 小計
- 注文書 - 合計
- 売上領収書 - 金額
そこで、一般的な名前の Amount ではなく、Subtotal を持つ派生クラス "Invoice" が必要になりました。理想的には、次の両方が真になります。
- Transaction のインスタンスでは、Amount プロパティが表示されます。
- Invoice のインスタンスでは、Amount プロパティは非表示になりますが、Subtotal プロパティはそれを内部的に参照します。
請求書は次のようになります。
public class Invoice : Transaction
{
new private double? Amount
{
get
{
return base.Amount;
}
set
{
base.Amount = value;
}
}
// This property should hide the generic property "Amount" on Transaction
public double? SubTotal
{
get
{
return Amount;
}
set
{
Amount = value;
}
}
public double RemainingBalance { get; set; }
}
もちろん、Transaction.Amount は Invoice のどのインスタンスにも表示されます。
ご覧いただきありがとうございます。