2011-08-07 8 views
2

辞書から継承するクラスmyCollectionがあります。 myCollectionのaddメソッドを非表示にしたいですか? プライベートの新しい修飾子を使用しましたが、まだ表示されています。 これはできませんか?新しい修飾子でベースクラスのパブリックメソッドを隠す

基底クラス

public void Add(TKey key, TValue value) 
    { 
     Insert(key, value, true); 
    } 

mycollection

private new void Add(string key, MyOtherClass myClass) 
    { 
     base.Add(key, myClass);  
    } 
+0

私はそれを隠すことをお勧めしません。 – BoltClock

+4

継承された関数を非表示にしてそのアクセシビリティを変更する必要がある場合は、通常、プログラムの設計に欠陥があるためです。 – Dalmas

答えて

7

いいえ、これは不可能です。

継承されたメンバーのアクセシビリティを変更することはできません。

継承の代わりにコンポジションを使用し、必要な機能のみを公開することができます(呼び出されたオブジェクトへの呼び出しを委任することによって)。これは、コード内の他の場所で継承チェーンに頼っている場合、オプションではない可能性があります。

0

Add inベースクラスのメソッドシグネチャがmycollectionクラスのメソッドのシグネチャと一致しないため、非表示になりません。

+0

ベースクラスの署名から、これらは汎用パラメータ(TKey、TValue)であると仮定します。実際のジェネリック型を使用して派生クラスに間違いはありません。 – Oded

+0

ああ、面白かった、私はそれを考慮しなかった。説明ありがとう。 –