运行时转换类型对象

时间:2011-07-29 10:01:34

标签: c# java generics casting runtime

我想在运行时实例化泛型类的对象;我调用一个方法,它给了我一个Type对象;我想将这个泛型类转换为一个特定的类,然后实例化该类的对象。可能吗?我曾经用Java写过:

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

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

2 个答案:

答案 0 :(得分:0)

获得类型对象后,您只需要调用:

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

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

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

然后投射到你的类型。

答案 1 :(得分:0)

使用反射(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;
   }
}