类型对象的运行时强制转换

本文关键字:转换 运行时 对象 类型 | 更新日期: 2023-09-27 18:03:50

我想在运行时实例化一个泛型类的对象;我调用一个给我返回一个Type Object的方法;我想把这个泛型类转换成一个特定的类,然后实例化这个类的对象。这可能吗?我曾经用Java写:

Class<DBConnectionProvider> dBConnectionProviderClass =
              (Class<DBConnectionProvider>)Configuration.getInstance().getDbConnectionProviderClass();

方法getDbConnectionProviderClass()返回一个在运行时转换的类对象;在我的c#应用程序中,这个方法返回一个Type对象;是否有可能将此转换为DBConnectionProvider并实例化此类?谢谢你的回答。

类型对象的运行时强制转换

一旦你有了类型对象,你只需要调用:

object o = Activator.CreateInstance([your type]).Unwrap();

或者如果你需要提供构造函数参数:

object o = Activator.CreateInstance([your type], obj1,obj2...).Unwrap();

然后转换为你的类型

使用反射创建类实例的简单示例(Java)

import java.awt.Rectangle;
public class SampleNoArg {
   public static void main(String[] args) {
      Rectangle r = (Rectangle) createObject("java.awt.Rectangle");
      System.out.println(r.toString());
   }
   static Object createObject(String className) {
      Object object = null;
      try {
          Class classDefinition = Class.forName(className);
          object = classDefinition.newInstance();
      } catch (InstantiationException e) {
          System.out.println(e);
      } catch (IllegalAccessException e) {
          System.out.println(e);
      } catch (ClassNotFoundException e) {
          System.out.println(e);
      }
      return object;
   }
}