我有一个从 Border 派生的 DraggableBorder 类,但我想将 Border.Child 设为私有。我该怎么做?
问问题
87 次
2 回答
2
你不能。这将打破Liskov 的替代原则。如果DraggableBorder
派生自Border
,我希望能够像使用它一样使用它Border
。
毕竟,总有人可以写:
Border border = new DraggableBorder();
border.Child = ...;
您希望编译器如何阻止它?
于 2012-09-23T07:50:57.717 回答
0
您可以通过定义一个新的私有成员来隐藏原来的 Child
public class DraggableBorder : Border
{
private new object Child {get;set;}
}
这样编译器会阻止您访问原始子属性
DraggableBorder myBorder = ...;
myBorder.Child ; // this will result in a compiler error
但这并不是真正的保护,因为您可以轻松解决它
((Border)myBorder).Child; // this will be ok
Border myBaseBorder = myBorder;
myBaseBorder.Child; // this will be ok
于 2012-09-23T11:39:29.113 回答