Итак, теперь, когда у нас есть общая ковариация и контравариантность для интерфейсов и делегатов в C #, мне было просто любопытно, если задано Type
, вы можете выяснить ковариацию / контравариантность его общих аргументов. Я начал пытаться написать свою собственную реализацию, которая просматривала бы все методы данного типа и проверяла, соответствуют ли возвращаемые типы и / или аргументы типам в общих аргументах. Проблема в том, что даже если у меня есть это:
public interface IFoo<T>
{
void DoSomething(T item);
}
используя мою логику, это ВЫГЛЯДИТ так, как будто это должно быть контравариантным, но поскольку мы на самом деле не указали:
public interface IFoo<in T>
{
void DoSomething(T item);
}
(параметр in) на самом деле это не контравариантно. Это приводит к моему вопросу: есть ли способ определить дисперсию общих параметров?