Я бы предложил, чтобы абстрактный базовый класс реализовывал интерфейс с методами, которые вызывают методы protected abstract
, как показано в вашем первом примере, за исключением методов, которые некоторые производные классы могут не реализовать (после «бросить все в * 1002»).* но не все методы на самом деле работают (шаблон);это могут быть protected virtual
заглушки, которые выбрасывают NotSupportedException
.
. Обратите внимание, что дочерний класс должен предоставлять какой-либо конкретный элемент интерфейса как открытый элемент с одинаковым именем (который может вызывать соответствующийабстрактный член).
Правильный шаблон в VB.net будет выглядеть примерно так: MustOverride Sub IFoo_Method1() Implements IFoo.Method1
, что позволит избежать дополнительных затрат на вызов функции, но C # не предоставляет никаких средств для реализации интерфейса с защищенным членом.,Использование явной реализации интерфейса для любого метода, который, возможно, придется переопределить в дочернем классе, несколько странно, поскольку повторная реализация дочерним интерфейсом дочернего элемента невозможна для цепочки реализации родительского элемента.