我正在努力获得此功能:
Class<?> c = Class.forName(dir.substring(6).replaceAll("/", ".")
+ file.getName().replaceAll(".java", ""));
Packet packet = (Packet)c.newInstance();
对于任何熟悉它的人来说,上面的代码是Java,它从一个目录中获取类,然后创建一个它的实例,这就是我在C#中尝试做的事情
我已经知道了这一点,现在我被卡住了......
foreach(Type t in assembly.GetTypes())
{
if (t.BaseType == typeof(Packet))
{
基本上我需要找到一种从Type构造类的方法,然后创建它的一个实例。
我尝试过使用Activator,如下所示:
foreach(Type t in assembly.GetTypes())
{
if (t.BaseType == typeof(Packet))
{
string namespaceName = t.Namespace;
string className = t.Name;
var myObj = Activator.CreateInstance(namespaceName, className);
但我无法弄清楚如何将其作为类而不是ObjectHandle
引用答案 0 :(得分:4)
基本上我需要找到一种从Type构造类的方法,然后创建它的实例。
Type
是一个类(或结构等)。获得适当的Type
后,可以使用各种方法对其进行实例化...例如,Activator.CreateInstance()
或调用Type.GetConstructors()
,找到正确的构造函数然后{{ 3}}它。
所有这些方法都会返回object
,因此您需要投射:
Packet packet = (Packet) Activator.CreateInstance(type);
答案 1 :(得分:1)
您好像在寻找Activator.CreateInstance
方法
var instance = Activator.CreateInstance(type);