0

Border から派生したクラス DraggableBorder がありますが、Border.Child を非公開にしたいです。どうすればいいですか?

4

2 に答える 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 に答える