C # Получить список всех созданных во время выполнения классов универсального класса

Я пытаюсь составить список всех классов, созданных во время выполнения, созданных универсальным классом. Другими словами, если у меня есть класс:

public GenericCls<T> {
    public void Reset() { ... }
    ...
}

И у меня есть код в разных местах вроде этого:

GenericCls<int> gci = new GenericCls<int>();
GenericCls<String> gcs = new GenericCls<String>();
GenericCls<float> gcf = new GenericCls<float>();
...

Могу ли я получить что-то вроде этого?:

Type[] allconstructed = GetAllConstructed(typeof(GenericCls<>));

который возвращает {GenericCls , GenericCls < String>, GenericCls , ...}

Вариант использования включает универсальный распределитель, который поддерживает любой тип распределения объектов (это похоже на new XXX () , но лучше для сборщика мусора ). Я не буду вдаваться в подробности, потому что это только усложнит вопрос. По сути, я не буду знать все созданные классы во время компиляции, поскольку библиотека представляет собой dll, предназначенную для использования с отдельным проектом кода. Так что мне понадобится какая-то форма отражения, которую я не могу найти в сети.

Ассамблея. GetExecutingAssembly (). GetExportedTypes () не содержит ничего, кроме базового универсального класса (т.е. typeof (GenericCls <>) )

typeof (GenericCls <>). GetGenericArguments () [1110958] возвращает только тип "T", который не только недействителен, но и совершенно бесполезен.

Возможно ли найти все сконструированные классы универсального класса, если вам известен только тип универсального класса? ( typeof (GenericCls <>); ) Я не уверен, правильное ли слово «сконструированный» - я хочу знать либо все конкретные классы, производные от родовых, которые в настоящее время активны, либо все из них, которые будут когда-либо существовать (не знаю, как C # обрабатывает общие конструкции за кулисами).

10
задан Oliver Charlesworth 11 February 2011 в 22:23
поделиться