Например, у меня есть два класса, выполняющих ту же функцию:Как определить общий метод, возвращающий экземпляр типа класса получения?
class HDD : Disk
{
public HDD RMA()
{
HDD newHDD = RMAService.Exchange(this);
return newHDD;
}
}
class SSD : Disk
{
public SSD RMA()
{
SSD newSSD = RMAService.Exchange(this);
return newSSD;
}
}
То, что я хотел бы это реализовать функцию RMA в базовом классе, но поддерживать сильно типизированных возвращаемое значение, так что пользователь может быть некоторые подписи функции, что они возвращают тип диска, который они отправили!
То, что я пытался до сих пор:
(см решений ниже)
Это определение типа некрасиво, хотя. Любой, кто создает свой собственный класс диска или ссылку на диск, с трудом знает, как правильно использовать этот тип.
Невозможно также ограничить аргумент типа точно определяемым классом. Кажется странным, что нет специального способа объявления свойства или метода в базовом классе, где тип времени компиляции - это любой производный тип.
Если бы я мог использовать оправдание «Мне трудно понять, как использовать тип» в моей дневной работе :( –
Это может быть улучшено, если вы представите, что делает функция «Exchange». он должен быть разделен - для того, чтобы неизвестная часть типа оставалась в базовом классе, и строго типизированная часть была подклассифицирована или, возможно, что-то похожее на «Clone» может быть введено. Трудно сказать, не зная, что внутри 'Exchange'. – BartoszKP
@ BartoszKP 'Exchange' - это любая функция, которая возвращает новый объект того же типа времени выполнения, что и переданный. Если вы хотите что-то сделать, просто напишите функцию, которая возвращает именно тот объект, который был передан.' Public T Exchange (T in) {return in;} ' –
Alain