2011-08-07 36 views
2

我有從myCollection繼承的類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 baseclass的方法簽名與mycollection類中的方法不匹配。

+0

從基類的簽名我假設這些是通用參數(TKey,TValue)。使用實際泛型類型的派生類沒有錯。 – Oded

+0

哦,有趣的是,我沒有考慮到這一點。感謝您的解釋。 –