我想知道为什么C#不允许private virtual
函数并且遇到恰当命名的Why are private virtual methods illegal in C#?
在接受的答案中Eric Lippert(谁可能知道他在说什么......)说:
如果您希望限制在非嵌套派生类中重写方法的能力,那么您可以通过限制非嵌套类从基类派生的能力来实现;
在C ++中private: virtual
是有意义的,因为它意味着“我希望从我派生的类覆盖此函数的功能,但它们不能直接调用它”,in其他单词private
控制谁可以调用函数,但对谁可以覆盖它没有影响。
我意识到,因为只有派生类可以首先覆盖,并且由于C#禁止private virtual
函数,这个问题可能毫无意义,是否存在其他方案,其中函数的保护级别可以影响谁可以覆盖它(也许protected internal
)?
答案 0 :(得分:7)
听起来你希望C ++世界能够覆盖而不是呼叫;然后没有:你不能在C#中做到这一点。 其他方式可以很好 - 或者首先不标记virtual
,或者标记sealed
如果已经 > virtual
。