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