Я не думаю, что допустимо , чтобы предположить, что это Container
экземпляр. Я вполне мог бы написать свою собственную реализацию IContainer
, и ваша реализация захлебнулась бы ею, нарушив весь смысл абстракции на основе интерфейса. Вы также не можете (действительно) просто изменить API для принятия Container
(используя явную реализацию для поддержки IContainer
), поскольку я мог бы использовать интерфейс, а не класс:
INodeVisitor visitor = new ContainerVisitor();
visitor.VisitContainer(myBespokeContainer);
Если вам нужна дополнительная поддержка чего-либо из базового класса, вам придется использовать «как» для ее обнаружения. Что-нибудь еще, и вы нарушаете абстракцию.