Частный означает разные вещи в C ++ и C #? - PullRequest
6 голосов
/ 25 ноября 2010

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

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

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

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

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

1 Ответ

7 голосов
/ 25 ноября 2010

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

...