我有很多课程,想要创建某种“目录”。
这样我就可以自动创建菜单了。
然后单击一个菜单项将创建该类的实例并显示该窗口。
我想要的是一个System.Type数组,我可以在其中填充所有类而无需实例化它们。
虽然从我的测试和(不成功)谷歌搜索,这似乎不可能。
有什么想法吗?
答案 0 :(得分:0)
是的,如果我理解正确,可以做到。查看System.Reflection命名空间中的类,从Assembly类及其GetExportedTypes方法开始。这将为您提供来自指定程序集的公共声明的System.Type对象数组 - http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getexportedtypes.aspx
答案 1 :(得分:0)
这是否适合您创建简单的映射? ArrayList不是通用的,但你可以自定义一个自定义对象。
var mapper = new System.Collections.Generic.Dictionary<string, System.Type>();
mapper.Add("show-about-box", typeof(MyApp.Forms.AboutBox));
然后你可以使用refleciton来创建类的实例,使用如下代码:
// 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);
}