Covariance
и Contravariance
обеспечивают дополнительную гибкость для объектов делегата. С другой стороны, событие не имеет таких понятий.
Covariance
позволяет назначить метод делегату, где возвращаемый тип метода является классом, который является производным от класса который задает тип возврата делегата. Contravariance
позволяет назначить метод делегату, где тип параметра метода является базовым классом класса, который указан как параметр делегат.