Control con;
   string ConType=con.GetType().AssemblyQualifiedName.ToString();  Type type = Type.GetType(ConType));
  object obj = Activator.CreateInstance(type);
  //
  如果上面的con 是一个Button, 
  这里根据Type,如何将obj 强制转换Type对于的类型??  而不是显示的强制转换:Button bt=(Button)obj ;
   
  

解决方案 »

  1.   

    那你要返回什么类型呢?有时候要返回Button、有时候要返回TextBox,你怎么知道返回什么类型呢?只能返回成一种都满足的类型,比如Control甚至object,然后在需要时再转换成你要的类型。
      

  2.   


    只知道 他是一个Control类型, 因为界面要动态设计。我的设计是这样的 从一个XML文件中读取界面信息,XML中保存 了各种控件的信息,然后读取XML文件,动态创建控件,如果转换成Control类型的,那几无法动态控制各种控件私有属性和事件
      

  3.   


    那该如何设计?  谢谢--------
    我的设计是这样的 从一个XML文件中读取界面信息,XML中保存 了各种控件的信息,然后读取XML文件,动态创建控件,如果转换成Control类型的,那几无法动态控制各种控件私有属性和事件
      

  4.   

    这没有问题,只有你想不想的通。
    你得到的如果只是T,你编程时知道这是什么么?你不知道如何用对应类型的方法和属性?所以,如果有你5楼的前提,一定是控件,那你类型转换为控件不就可以了?
    Control c = obj as Control;
    if(c == null) throw new Exception("Just control or subclass support.");
    c.Text....
      

  5.   

    泛型类
    Convert.ChangeType(value, type); 
    objProperty.SetValue(obj,Convert.ChangeType(
    controlProperty.GetValue(control, null),
    objProperty.PropertyType) , null);
      

  6.   


    如果是集合,你根本不关心T是什么,所以可以用泛型。但是如果泛型只支持到此,也是很多情况无法适用,所以有了泛型约束,
    public void Use<T>(T data) where T:Form,new()
    {
        //T不同于简单的Form,因为还约束必须有无参构造函数
    }所有的方法、技术、语法、都是针对环境和某个情况的。没有一概而论的。object obj = new Form();
    如果希望适用obj有关窗体的属性,那你需要转换成窗体才可以,那你不都知道是窗体了么?为什么不能强制类型转换?反射,如果你不知道,就GetMethod().Invoke去调用,那就和具体类型无关。
    现在的问题是你很矛盾,既要知道具体类型,又要反射的时候不指定类型。你到底要不要指定你自己要想明白啊。你需求就是矛盾的。强制转换成Type的类型目的是什么?不就是可以用对应的属性吗?那你编译时候都知道属性了,不就定死类型了?反之不知道类型时才需要用Type获得一个类型。不知道你能否明白你自己矛盾的需求。