Причина, по которой вы не можете получить доступ к методу PrintMore
, заключается в том, что вы переназначаете приведенную к типу форму обратно в переменную, определенную как IShape
. Чтобы иметь возможность использовать методы класса Square
, необходимо сохранить его в переменной типа Square
, например:
Square s = (Square)shape;
s.PrintMore();
или альтернативно:
((Square) shape).PrintMore();
Хотя, возможно, стоит хорошенько взглянуть на ваш код, приведение типов, например, обычно является хорошим предупреждением о том, что, возможно, он не идеален. Возможно, IShape
должен иметь метод PrintMore
, или, возможно, вы должны принимать только Square
объекты в этой точке? По крайней мере, я бы посоветовал убедиться, что shape
на самом деле имеет тип Square
перед выполнением этого приведения типа.
Например:
Square s = shape as Square;
if (s != null)
s.PrintMore();