【发布时间】:2014-04-15 16:24:00
【问题描述】:
假设我有一个类层次结构,其中 number 在创建 B 的实例时通过构造函数链接设置为默认值。由于 _number 的值应该是默认值,因此必须覆盖属性 Number 以便删除 set 访问器。
abstract Class A
{
public int Number
{
get
{
return _number
}
set
{
_number = value;
}
}
}
Class B : Class A
{
public int Number
{
get
{
return _number
}
}
}
【问题讨论】:
-
我不认为这是可能的,并且有一个很好的理由:它会违反 Liskov 的替换原则并违反基类合同 - 显然类
B不是类A,因为它表现出明显不同的行为。 -
为什么不能做setter
private? -
这打破了 SOLID 的 Liskov 替换。请看stackoverflow.com/questions/22838199/…
标签: c# inheritance properties