我有一个从Border派生的DraggableBorder类,但我想将Border.Child设为私有。 我该怎么办?
答案 0 :(得分:2)
你不能。它会破坏Liskov's Substitution Principle。如果DraggableBorder
来自Border
,我希望能够将其用作Border
。
毕竟,总有人可以写:
Border border = new DraggableBorder();
border.Child = ...;
您希望编译器如何阻止它?
答案 1 :(得分:0)
您可以通过定义新的私有成员
来隐藏原始子项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