当你读到这篇文章时,你会非常想给出这样的建议:“这是一个坏主意,原因如下......”
忍受我。我知道还有其他方法可以解决这个问题。这个问题应该被认为是琐事。
假设您有一个“交易”类,它具有所有交易共同的属性,例如发票、采购订单和销售收据。
让我们以交易“金额”为例,它是给定交易最重要的货币金额。
public class Transaction
{
public double Amount { get; set; }
public TxnTypeEnum TransactionType { get; set; }
}
此金额在派生类型中可能具有更具体的名称……至少在现实世界中。例如,以下值实际上都是相同的:
- 交易 - 金额
- 发票 - 小计
- 采购订单 - 总计
- 销售收据 - 金额
所以现在我想要一个派生类“发票”,它有一个小计而不是一般命名的金额。理想情况下,以下两种情况都是正确的:
- 在 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 实例上仍然可见。
谢谢参观!