C# System.Type的数组/列表/目录

C# System.Type的数组/列表/目录,c#,.net,mono,C#,.net,Mono,我有很多类,想创建某种“目录” 这样我就可以自动创建菜单了 单击菜单项将创建类的实例并显示窗口 我想要的是一个System.Type数组,我可以在其中填充所有类,而无需实例化它们 虽然从我的测试和(不成功的)谷歌搜索来看,这似乎是不可能的 有什么想法吗?是的,如果我没弄错的话,这是可以做到的。查看System.Reflection命名空间中的类,从Assembly类及其GetExportedTypes方法开始。这将为您提供一个公共声明的System.Type对象数组,这些对象来自指定的程序集-这

我有很多类,想创建某种“目录”

这样我就可以自动创建菜单了

单击菜单项将创建类的实例并显示窗口

我想要的是一个System.Type数组,我可以在其中填充所有类,而无需实例化它们

虽然从我的测试和(不成功的)谷歌搜索来看,这似乎是不可能的


有什么想法吗?

是的,如果我没弄错的话,这是可以做到的。查看System.Reflection命名空间中的类,从Assembly类及其GetExportedTypes方法开始。这将为您提供一个公共声明的System.Type对象数组,这些对象来自指定的程序集-

这对您创建简单映射有用吗?ArrayList不是泛型的,但您可以创建一个自定义对象来填充其中的内容

var mapper = new System.Collections.Generic.Dictionary<string, System.Type>();   
mapper.Add("show-about-box", typeof(MyApp.Forms.AboutBox));
// Create an instance using [Activator.CreateInstance][1].
System.Type toCreate = mapper["show-about-box"];
Object o = Activator.CreateInstance(toCreate);

// Or, using try-get to be safer
System.Type toCreate = null;
if ( mapper.TryGetValue("show-about-box", out toCreate) ) {
     Object o = Activator.CreateInstance(toCreate);
}