Я пытаюсь составить список всех классов, созданных во время выполнения, созданных универсальным классом. Другими словами, если у меня есть класс:
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
Вариант использования включает универсальный распределитель, который поддерживает любой тип распределения объектов (это похоже на new XXX ()
, но лучше для сборщика мусора ). Я не буду вдаваться в подробности, потому что это только усложнит вопрос. По сути, я не буду знать все созданные классы во время компиляции, поскольку библиотека представляет собой dll, предназначенную для использования с отдельным проектом кода. Так что мне понадобится какая-то форма отражения, которую я не могу найти в сети.
Ассамблея. GetExecutingAssembly (). GetExportedTypes ()
не содержит ничего, кроме базового универсального класса (т.е. typeof (GenericCls <>)
)
typeof (GenericCls <>). GetGenericArguments () [1110958] возвращает только тип "T", который не только недействителен, но и совершенно бесполезен.
Возможно ли найти все сконструированные классы универсального класса, если вам известен только тип универсального класса? ( typeof (GenericCls <>);
) Я не уверен, правильное ли слово «сконструированный» - я хочу знать либо все конкретные классы, производные от родовых, которые в настоящее время активны, либо все из них, которые будут когда-либо существовать (не знаю, как C # обрабатывает общие конструкции за кулисами).