我可以在C#中的派生类中将公共成员从父类更改为私有吗?

时间:2012-09-23 07:49:38

标签: wpf wpf-controls

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

2 个答案:

答案 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