Border から派生したクラス DraggableBorder がありますが、Border.Child を非公開にしたいです。どうすればいいですか?
2 に答える
2
できません。それはリスコフの代替原理を破るでしょう。DraggableBorder
から派生した場合Border
、あたかもBorder
.
結局のところ、誰かがいつでも次のように書くことができます:
Border border = new DraggableBorder();
border.Child = ...;
コンパイラがそれを停止することをどのように期待しますか?
于 2012-09-23T07:50:57.717 に答える
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
于 2012-09-23T11:39:29.113 に答える