0

我有一个从 Border 派生的 DraggableBorder 类,但我想将 Border.Child 设为私有。我该怎么做?

4

2 回答 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 回答