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 ;
调试欢乐多
只知道 他是一个Control类型, 因为界面要动态设计。我的设计是这样的 从一个XML文件中读取界面信息,XML中保存 了各种控件的信息,然后读取XML文件,动态创建控件,如果转换成Control类型的,那几无法动态控制各种控件私有属性和事件
那该如何设计? 谢谢--------
我的设计是这样的 从一个XML文件中读取界面信息,XML中保存 了各种控件的信息,然后读取XML文件,动态创建控件,如果转换成Control类型的,那几无法动态控制各种控件私有属性和事件
你得到的如果只是T,你编程时知道这是什么么?你不知道如何用对应类型的方法和属性?所以,如果有你5楼的前提,一定是控件,那你类型转换为控件不就可以了?
Control c = obj as Control;
if(c == null) throw new Exception("Just control or subclass support.");
c.Text....
Convert.ChangeType(value, type);
objProperty.SetValue(obj,Convert.ChangeType(
controlProperty.GetValue(control, null),
objProperty.PropertyType) , null);
如果是集合,你根本不关心T是什么,所以可以用泛型。但是如果泛型只支持到此,也是很多情况无法适用,所以有了泛型约束,
public void Use<T>(T data) where T:Form,new()
{
//T不同于简单的Form,因为还约束必须有无参构造函数
}所有的方法、技术、语法、都是针对环境和某个情况的。没有一概而论的。object obj = new Form();
如果希望适用obj有关窗体的属性,那你需要转换成窗体才可以,那你不都知道是窗体了么?为什么不能强制类型转换?反射,如果你不知道,就GetMethod().Invoke去调用,那就和具体类型无关。
现在的问题是你很矛盾,既要知道具体类型,又要反射的时候不指定类型。你到底要不要指定你自己要想明白啊。你需求就是矛盾的。强制转换成Type的类型目的是什么?不就是可以用对应的属性吗?那你编译时候都知道属性了,不就定死类型了?反之不知道类型时才需要用Type获得一个类型。不知道你能否明白你自己矛盾的需求。