Вы забыли указать, куда вы звоните GetAge
. Но в любом случае фактический тип Man
- это информация о времени выполнения , которая недоступна компилятору. Представьте, что вы получите экземпляр IPerson
от веб-службы
IPerson p = service.GetPerson();
Как компилятор должен знать, что этот экземпляр на самом деле Man
или что-то еще? Представьте себе, что есть еще один класс, реализующий ваш интерфейс. Вы
видите проблему? Компилятор не может знать, какой класс служба возвращает во время выполнения . Вот почему вы не можете получить доступ к членам, относящимся к реализующим классам. Там просто нет члена GetAge
на IPerson
. Фактически, любой базовый класс или -интерфейс не должен никогда * знать что-либо о своих дочерних классах.
Если вы знаете точный тип во время compile , вы можете, конечно, либо привести к этому конкретному типу, либо просто определить переменную для этого типа:
Man p = new Man();