Ковариантный возвращаемый тип - Covariant return type

В объектно-ориентированного программирования, а ковариантный возвращаемый тип метода - это метод, который может быть заменен более узким типом, когда метод отвергнутый в подклассе. Известный язык, в котором эта парадигма является довольно распространенной, - это C ++.

C # не поддерживает ковариацию возвращаемого типа; однако это было изложено[1] будет добавлена ​​как новая языковая функция в готовящемся к выпуску C # 9.0. Ковариантные возвращаемые типы были (частично) разрешены в Язык Java с момента выпуска JDK5.0,[2] поэтому следующий пример не будет компилироваться в предыдущем выпуске:

 // Классы, используемые как возвращаемые типы:  учебный класс А { }  учебный класс B расширяет А { }  // «Класс B уже, чем класс A» // Классы, демонстрирующие переопределение метода:  учебный класс C {     А getFoo() {         возвращаться новый А();     } }   учебный класс D расширяет C {// Переопределение getFoo () в родительском классе C     B getFoo() {         возвращаться новый B();     } }

В частности, ковариантный (от широкого к более узкому) или контравариантный (от узкого к более широкому) тип возвращаемого значения относится к ситуации, когда тип возвращаемого значения переопределяющего метода изменяется на тип, связанный (но отличный от) с типом возвращаемого значения исходного переопределенного метода. . Связь между двумя ковариантными возвращаемыми типами обычно такова, что допускает замену одного типа другим после Принцип подстановки Лискова. Обычно это подразумевает, что возвращаемые типы замещающих методов будут подтипами возвращаемого типа замещенного метода. Приведенный выше пример специально иллюстрирует такой случай. Если подстановка не разрешена, возвращаемый тип остается неизменным и вызывает ошибку компиляции.

Смотрите также

внешняя ссылка

Рекомендации

  1. ^ «Добро пожаловать в C # 9.0». Блог .NET. 2020-05-20. Получено 2020-05-21.
  2. ^ мостовые методы были введены для обхода проблем, связанных с полиморфизмом и стиранием нового универсального типа