Я работаю с ASP.NET MVC в C#. Я создаю классы обслуживания. У меня есть служебный интерфейс для сервисных интерфейсов драйвера (IDriverService).Реализация интерфейса, но возвращающий подкласс возвращаемого типа?
Это следующее определение метода:
Driver New();
У меня есть две реализации этого интерфейса, который реализует этот метод как таковой:
Driver New()
{
return new Driver();
}
Driver New()
{
return new SubclassOfDriver();
}
Как вы можете видеть одну реализацию реализует Новый метод, возвращая базовый драйвер, а другой - для некоторого подкласса драйвера.
Проблема заключается в реализации интерфейса, который я должен вернуть «Драйвер», но иногда я хочу вернуть «SubclassOfDriver». Я мог бы сказать, что вы должны отдать результат драйверу, который вы хотите, но это небезопасно, и кодер потребует информации о реализации, чтобы определить, какой драйвер был создан. Каков наилучший способ сделать это?
Благодаря
Вы можете вернуть интерфейс вместо класса (так что IDriver New(); ') – Raidri
Кастинг в базовый класс небезопасен и даже не нужен. Это неявное безопасное преобразование. –
Клиент не должен заботиться о том, какой экземпляр «Драйвер» был создан - это дизайнерский запах, если он это делает. – millimoose