У меня есть подкласс с переопределенным методом, который, как я знаю, всегда возвращает определенный подтип типа возврата, объявленного в базовом классе. Если я напишу код таким образом, он не будет компилироваться. Поскольку это, вероятно, не имеет смысла, позвольте мне привести пример кода:
class BaseReturnType { }
class DerivedReturnType : BaseReturnType { }
abstract class BaseClass {
public abstract BaseReturnType PolymorphicMethod();
}
class DerivedClass : BaseClass {
// Compile Error: return type must be 'BaseReturnType' to match
// overridden member 'BaseClass.PolymorphicMethod()'
public override DerivedReturnType PolymorphicMethod() {
return new DerivedReturnType();
}
}
Есть ли способ сделать это на С#? Если нет, то какой лучший способ добиться чего-то подобного? И почему это не разрешено? Похоже, что это не допускает какой-либо логической несогласованности, поскольку любой объект, возвращаемый с помощью переопределенного метода, еще is BaseReturnType
. Возможно, я кое-что не рассмотрел. Или, может быть, причина технологическая или историческая.