MyClass
, с точки зрения компилятора, это способ опустить callvirt
инструкцию в пользу call
инструкции. По сути, когда вы вызываете метод с виртуальной семантикой (callvirt
), вы указываете, что хотите использовать наиболее производные вариации. В случаях, когда вы хотите опустить производные вариации, вы используете MyClass
(call
). Хотя вы заявили, что понимаете основную концепцию, я полагал, что это может помочь описать ее с функциональной точки зрения, а не подразумевать понимание. Он функционально идентичен MyBase
с предостережением объема, являющимся базовым типом с MyBase
, вместо активного типа с MyClass
.
Переопределение семантики виртуальных вызовов в текущей точке иерархии, как правило, является плохим выбором дизайна, единственное время, когда оно действительно, - это когда вы должны полагаться на определенную функциональность в иерархии своего объекта и не можете полагайтесь на наследника, чтобы называть свое изменение посредством базового вызова в их реализации. Он также может полагаться на вас как на дизайнера, который решил, что это единственная альтернатива, так как вы переопределили функциональность в иерархии объектов, и вы должны убедиться, что в этом угловом случае этот конкретный метод на текущем уровне дерева наследования должен быть называется.
Это все о дизайне, понимании общего дизайна и угловых корпусов. Вероятно, причина в том, что C ♯ не включает такую функциональность, поскольку в этих угловых случаях вы можете разделить метод на частный вариант, который текущий уровень в иерархии вызывает, и просто ссылаться на эту частную реализацию, когда это необходимо.Моя личная точка зрения заключается в том, что использование подхода сегментации - идеальное средство для достижения цели, поскольку оно явно говорит о вашем выборе дизайна, и его легче отслеживать (и оно также является единственным действительным средствами на языках без функционального эквивалента MyClass
.)
Спасибо, что ответили на мой 5-летний вопрос :) Я думаю, что «неправильный выбор дизайна» - это ответ; приватный закрытый/публичный виртуальный кажется намного лучше. – 2013-10-01 15:57:08