Когда вы делаете
BaseClass baseObject= new ChildClass();
Статическим объявленным типом объекта является тип "BaseClass
".
Следовательно, вы можете видеть только объекты типа "BaseClass"
.
Если вы уверены, что объект имеет тип ChildClass, вы можете типизировать baseObject для «ChildClass», а затем использовать члены ChildClass
((ChildClass) baseObject).
- должен помочь intellisense дать вам членов дочернего класса.
Использование BaseClass baseObject= new ChildClass();
является основой для полиморфизма RunTime .
Он очень часто используется, если вам нужно вызвать переопределенную дочернюю логику, но интерфейс этого интерфейса базового класса
РЕДАКТИРОВАТЬ: Пример сценария, где вы будете использовать его
Класс User
имеет производные классы с именами Employee
и 3rdPartyUser
Класс User имеет виртуальный метод GetRoleInformation, который используется для получения информации о роли пользователя из Active Directory компании.
Однако для стороннего пользователя, поскольку информация не существует в AD, логика получения информации о роли включает в себя вызов веб-службы для извлечения данных.
В этом случае GetRoleInformation переопределяется в классе 3rdPartyUser
Теперь, в программе, на странице входа в систему, после аутентификации я либо получаю объект Employee, либо 3rdPartyUser.
Я передаю этот объект методу с подписью RoleCollection GetRole( User loggedInUser)
Внутри этого метода, без необходимости определять тип пользователя, я просто вызываю loggedInUser.GetRoleInformation
и в зависимости от того, является ли он Employee / 3rdPartyUser
, будет вызван соответствующий базовый / переопределенный метод, и данные роли будут получены из любого из них. AD / Web Service.
Короче говоря:
Преимущество
BaseClass baseObject= new ChildClass();
OVER
ChildClass baseObject= new ChildClass();
в сценариях, когда вы не уверены в точном типе дочернего объекта, который будет назначен переменной baseObject, например: в этом случае Employee / 3rdPartyUser
Например:
BaseClass baseObject= GetLoggedInUser();
где сигнатура этого метода User GetLoggedInUser(string userid)
В противном случае, в примере, подобном вашему, где объект ВСЕГДА имеет тип "ChildClass", я считаю, что это не дает никаких преимуществ.