2 回答
TA贡献1798条经验 获得超3个赞
这...
List<ModuleArchetype>
...是一个列表,其中可以包含从ModuleArchetype继承的类的实例。它不是类型列表或类本身列表。
我猜该列表对您完全没有用,因为您似乎对静态成员感兴趣,并且实例中不包含静态成员。
如果需要与从ModuleArchetype继承的类相对应的类型列表,则需要
List<Type>
一旦将所有类型存储在列表中,就可以通过反射访问其静态成员,如下所示:
foreach (var item in list)
{
var properties = item.GetProperties(BindingFlags.Static | BindingFlags.Public);
}
如果要获取Banana的Alias属性,最终将使用:
var aliasProperty = list.Where( t => t.Name == "Banana" )
.GetProperties(BindingFlags.Static | BindingFlags.Public)
.Single( p => p.Name == "Alias" );
var currentValue = aliasProperty.Invoke(null) as string;
Console.WriteLine(currentValue); //Should be "banana"
当然,如果您知道要使用Banana的Alias属性,则输入起来比较容易
var currentValue = Banana.Alias;
在列表中检索项目将使您能够访问静态成员是不可能的,因为列表中的类型信息不足以使编译器不了解每个不同元素的独特属性或方法。
TA贡献1824条经验 获得超6个赞
您不能将一种类型添加到列表中,因为它是一种类型。您必须定义一个对象才能将其添加到列表中。
如果要创建插件系统或类似的系统。建议您创建一个界面。这将具有轻松创建对象列表以及从对象获取数据的能力。
我已经使用开放源代码的TCP服务器完成了此操作,客户端可以在该服务器上向服务器发送命令。服务器将使用在运行时加载的插件列表来激活invoke方法。
通常,我建议使用接口与您的命令类进行交互。这样,您和其他人创建的所有命令将更容易理解。
- 2 回答
- 0 关注
- 224 浏览
添加回答
举报