Автоматически извлекать и применять неуниверсальные интерфейсы для универсальных классов? - PullRequest
0 голосов
/ 30 ноября 2018

Есть ли способ автоматически сгенерировать неуниверсальный интерфейс для универсального класса / переменной?

Это было бы полезно в сценариях 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>;Вот почему я размышлял в духе ткацкого подхода, такого как Фоди или рефлексия.


Я видел похожие вопросы, которые не охватывают этот конкретный сценарий, например этот и это .

...