У меня есть подкласс с переопределенным методом, который, как я знаю, всегда возвращает определенный подтип возвращаемого типа, объявленного в базовом классе. Если я напишу код таким образом, он не скомпилируется. Поскольку это, вероятно, не имеет смысла, позвольте мне привести пример кода:
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();
}
}
Есть ли способ сделать это в C #? Если нет, то как лучше всего добиться чего-то подобного? И почему это не разрешено? Кажется, это не допускает никакой логической несогласованности, поскольку любой объект, возвращенный из переопределенного метода, все еще is BaseReturnType
. Может быть, есть то, что я не учел, хотя. Или, может быть, причина технологическая или историческая.