Мне было интересно, почему C # не поддерживает функции private virtual
, и наткнулся на метко названный Почему частные виртуальные методы запрещены в C #?
В принятом ответе Эрик Липперт (кто, вероятно, знает, о чем он говорит ...) сказал:
Если вы желаете ограничить возможность переопределения метода в невложенных производных классах, вы можете сделать это, ограничив способность невложенных классов быть производными от базового класса;
В C ++ private: virtual
имеет смысл, потому что это означает «Я хочу, чтобы классы, производные от меня, переопределяли функциональность этой функции, но они не должны иметь возможность вызывать ее напрямую», другими словами private
контролирует, кто может вызывать функция и не влияет на то, кто может ее переопределить.
Я понимаю, что, поскольку только производные классы могут переопределять в первую очередь, и поскольку C # запрещает private virtual
функции, этот вопрос может быть бессмысленным, существуют ли другие сценарии, в которых уровень защиты функции может повлиять на то, кто может ее переопределить (возможно, protected internal
)?