【发布时间】:2011-08-22 09:34:04
【问题描述】:
我有以下代码。
class A
{
public virtual int BoardSize { get; set; }
}
class B : A
{
public override int BoardSize
{
get{return 100;}
}
}
Class Client
{
B b = new B();
b.BoardSize = 55;
}
在基类中,属性是读/写的。但在派生类中它是只读的,应该总是返回 100。虽然当我运行代码时,我发现它总是按预期返回 100。
但是,我不希望客户在 B 类中设置 BoardSize。所以它根本不允许客户端写 b.BoardSize = 55。
这怎么可能?
【问题讨论】:
-
如果派生类不能遵守基类的约定,那么你就是在滥用继承。
-
@Martinho,我不同意你的派生类不遵守合同。合同正在完全履行。 OP 唯一想要的就是控制实现和访问级别。
-
@code4life,是的,你是绝对正确的。由于派生类可以修改实现,这不会破坏继承规则或滥用继承。
-
@code4life:据我所知,合同包括一个 BoardSize 的设置器。如果派生类没有,我称之为违约。
-
@anil:当然,派生类可以修改实现。但据我了解,您不想修改实现,而是要修改接口(删除setter)。
标签: c# properties derived-class base-class