2010-11-25 31 views
6

我想知道爲什麼C#不允許private virtual功能和整個恰當地命名爲Why are private virtual methods illegal in C#?在C++和C#中,私有是否意味着不同的東西?

跑在接受的答案Eric Lippert(誰可能知道他在說什麼......)說:

如果您希望限制覆蓋非嵌套派生類中方法的能力,那麼您可以通過限制非嵌套類從基類派生的能力來實現;

在C++ private: virtual是有道理的,因爲這意味着「我想從我這裏得到的超越此功能的功能類,但他們不應該是能夠直接稱之爲」,換句話說private控制誰能夠調用一個函數並且不會影響誰可以覆蓋它。

我意識到,因爲只有派生類可以擺在首位,自重寫C#禁止private virtual功能這個問題可能是毫無意義的,是有其中一個功能的保護水平可以影響誰可以替代它的其他情形(protected internal也許)?

回答

7

這聽起來像你希望C++世界能夠重寫但不能調用;然後否:你不能在C#中做到這一點。 其他方式是好的,雖然 - 要麼不標記它virtual在第一位,或標記它sealed如果它是已經virtual