私有在C++和C#中是否意味着不同的东西?

Mot*_*tti 6 c# c++ language-design private

我想知道为什么C#不允许private virtual函数并且碰到了恰当的命名为什么私有虚方法在C#中是非法的?

在接受的答案中,Eric Lippert(他可能知道他在说什么......)说:

如果您希望限制在非嵌套​​派生类中重写方法的能力,那么您可以通过限制非嵌套类从基类派生的能力来实现;

在C++ private: virtual中有意义,因为它意味着"我希望从我派生的类覆盖此函数的功能,但它们不能直接调用它",换句话说,private控制谁可以调用函数并且对谁不能影响覆盖它.

我意识到,因为只有派生类可以首先覆盖,并且由于C#禁止private virtual函数,这个问题可能毫无意义,还有其他场景,其中函数的保护级别可以影响谁可以覆盖它(protected internal可能)?

Mar*_*ell 7

听起来你想要C++世界能够覆盖而不是呼叫; 然后没有:你不能在C#中做到这一点.在周围的其他方式是好的,但-要么不标注它virtual摆在首位,或者将其标记sealed,如果它是 virtual.