Есть ли способ автоматически сгенерировать неуниверсальный интерфейс для универсального класса / переменной?
Это было бы полезно в сценариях COM-взаимодействия, где универсальныйклассы исключены из библиотеки типов COM;но если в том же классе реализован неуниверсальный интерфейс, то объекты этого типа могут быть доступны через интерфейс.
Очевидно, что такой интерфейс можно создать вручную, но в моем текущем проекте их много, поэтомуэто неудобноТакже автоматически сгенерированный шаблонный код, подобный этому, будет менее подвержен ошибкам (IMO).
Типичным примером будет:
class Foo<T>
{
public T F { get; set;}
}
...
Foo<int> f; // <== Is there any way to generate a nongeneric interface for Foo<int> ?
Соответствующий интерфейс для этого примера будет выглядеть так:
interface IFooInt
{
public int F { get; set;}
}
Конечно, Foo
действительно может быть Dictionary
или чем-то еще.
Я открыт для идей, использующих отражение или ткачество (а-ля Fody ),этапы постобработки с использованием некоторого инструментария, полуручная обработка каким-либо образом с использованием отражения и т. д.
Помимо написания самого фактического интерфейса, он затем также должен повторно подключить этот интерфейс обратно к исходному универсальному классу Foo<int>
;Вот почему я размышлял в духе ткацкого подхода, такого как Фоди или рефлексия.
Я видел похожие вопросы, которые не охватывают этот конкретный сценарий, например этот и это .