Означает ли частное разные вещи в C ++ и C #?

Мне было интересно, почему C # не поддерживает функции private virtual, и наткнулся на метко названный Почему частные виртуальные методы запрещены в C #?

В принятом ответе Эрик Липперт (кто, вероятно, знает, о чем он говорит ...) сказал:

Если вы желаете ограничить возможность переопределения метода в невложенных производных классах, вы можете сделать это, ограничив способность невложенных классов быть производными от базового класса;

В C ++ private: virtual имеет смысл, потому что это означает «Я хочу, чтобы классы, производные от меня, переопределяли функциональность этой функции, но они не должны иметь возможность вызывать ее напрямую», другими словами private контролирует, кто может вызывать функция и не влияет на то, кто может ее переопределить.

Я понимаю, что, поскольку только производные классы могут переопределять в первую очередь, и поскольку C # запрещает private virtual функции, этот вопрос может быть бессмысленным, существуют ли другие сценарии, в которых уровень защиты функции может повлиять на то, кто может ее переопределить (возможно, protected internal)?


person Motti    schedule 25.11.2010    source источник


Ответы (1)


Похоже, вы хотите, чтобы мир C ++ мог переопределять, но не вызывать; тогда нет: вы не можете сделать это на C #. Однако другой способ вполне подойдет - либо не отмечайте его virtual в первую очередь, либо отметьте sealed, если он уже virtual.

person Marc Gravell    schedule 25.11.2010