java - C# 从类型创建类的实例

标签 java c# reflection .net-assembly

我正在尝试获得此功能:

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/

相关文章:

java - 为什么在扩展抽象类中需要另一个构造函数?

Java QName 前缀不起作用

Java-识别整数和 double

java - grails:如何禁用<s2ui:form>标记的可调整大小的属性

c# - 通过键而不是值c#设置ComboBox选择的项目

php - 使用数字键的 Reflection::getProperties() 的奇怪行为

c# - WCF REST 错误处理 - 不正确的输入

c# - 从soapxml获取XML子节点值

java - 从类型为 "Class<?>"的对象启动 main 方法

c# - 如何在循环中使用匿名方法实例化唯一委托(delegate)(在 C# 中)?