Hob*_*ist 0 c# java reflection .net-assembly
我正在尝试获得此功能:
Class<?> c = Class.forName(dir.substring(6).replaceAll("/", ".")
+ file.getName().replaceAll(".java", ""));
Packet packet = (Packet)c.newInstance();
Run Code Online (Sandbox Code Playgroud)
对于熟悉它的任何人,上面的代码都是Java,它从目录中获取类,然后创建它的实例,这就是我在C#中试图做的事情
我已经走了这么远,现在我被困住了...
foreach(Type t in assembly.GetTypes())
{
if (t.BaseType == typeof(Packet))
{
Run Code Online (Sandbox Code Playgroud)
基本上,我需要找到一种从Type构造类的方法,然后创建它的实例。
我试过使用激活器,如下所示:
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);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何引用它作为一个类而不是ObjectHandle
基本上,我需要找到一种从Type构造类的方法,然后创建它的实例。
A Type 是类(或结构等)。有了适当的后Type,可以使用各种选项来实例化它,例如Activator.CreateInstance(),或call Type.GetConstructors(),找到合适的构造函数然后调用它。
所有这些方法都将返回object,因此您需要强制转换:
Packet packet = (Packet) Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)