Существует ли способ определить Различие Интерфейса / Делегат в C# 4.0?

Таким образом теперь, когда у нас есть универсальная Ковариантность и Контравариантность в интерфейсах и делегатах в C#, мне было просто любопытно, если дали a Type, можно выяснить ковариантность/контравариантность его универсальных аргументов. Я начал пытаться записать свою собственную реализацию, которая будет просматривать все методы на данном типе и видеть, вводит ли возврат и или аргументы соответствуют типам в универсальных аргументах. Проблема - это, даже если у меня есть это:

public interface IFoo<T>
{
   void DoSomething(T item);
}

с помощью моей логики Похоже, что это должен быть контравариант, но так как мы на самом деле не указывали:

public interface IFoo<in T>
{
   void DoSomething(T item);
}

(в параметре), это не на самом деле контравариант. Который приводит к моему вопросу: существует ли способ определить различие универсальных параметров?

9
задан BFree 27 May 2010 в 04:19
поделиться

1 ответ

Я не знаю, зачем вам это, НО вы можете смотреть на это с отражением извне шрифта. Вот информация о просмотре общих параметров для типа с использованием отражения:

http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx

В частности, свойство Type.GenericParameterAttributes полученного вами типа назад от вызова Type.GetGenericParameters покажет свойства Co / Contravariance универсального аргумента ... это поразрядное перечисление, которое покажет комбинацию этой информации:

http://msdn.microsoft.com/en- us / library / system.reflection.genericparameterattributes.aspx

Действительно интересно ... спасибо, что спросил об этом и заставил меня поискать.

6
ответ дан 4 December 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: