我正在尝试获得此功能:
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))
{
基本上我需要找到一种方法从类型构造一个类,然后创建它的一个实例。
我尝试过使用激活器,如下所示:
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 引用
最佳答案
Basically I need to find a way to construct a class from the Type, then create an instance of it.
类型
是一个类(或结构体等)。一旦您获得了适当的类型
,就可以使用各种选项来实例化它......例如,Activator.CreateInstance()
,或调用Type.GetConstructors()
,找到正确的构造函数,然后 invoke它。
所有这些方法都会返回对象
,因此您需要进行强制转换:
Packet packet = (Packet) Activator.CreateInstance(type);
关于java - C# 从类型创建类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26690163/