System.Windows.Forms.dll在全局系统缓存中已经有,既然已经引用,无需这样执行。如果没有引用第三句无法执行

解决方案 »

  1.   

    object examObject = ass.CreateInstance("System.Windows.Forms.TextBox");中的"System.Windows.Forms.TextBox"是保存在变量中的,所以才有这样的要求
    也可能是"System.Windows.Forms.ComboBox",生成后的object可以转换为System.Windows.Forms.Control
      

  2.   

    string s = @"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Windows.Forms.dll";
    Assembly a = Assembly.LoadFile(s);
    Type t = a.GetType("System.Windows.Forms.Button");
    object o = System.Activator.CreateInstance(t);

    if ( o.GetType() == sender.GetType())
    {
    MessageBox.Show("类型匹配!");
    }
    else
    {
    MessageBox.Show("类型不匹配!");
    }楼主运行一下这个程序
    结果是【类型不匹配!】
      

  3.   

    To: brightheroes(闭关|那一剑的风情)楼主的
    object examObject = ass.CreateInstance("System.Windows.Forms.TextBox");
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    System.Windows.Forms.Control ct = (System.Windows.Forms.Control)examObject;只是简单的装箱与拆箱,应该没有类型问题呀
      

  4.   

    不会没有提示,应该是 转换无效的异常
    to 楼上的System.Windows.Forms.Control是当前的已经加载了的dll里面的而
    object examObject = ass.CreateInstance("System.Windows.Forms.TextBox");
    是从另外一个Assembly里面获取的这么转换,肯定8行
      

  5.   

    Assembly a = Assembly.LoadFrom(@"E:\TestColumnDragDataGrid.exe");
    object o = a.CreateInstance("TestColumnDragDataGrid.ClassB");
    ClassB cb = (ClassB)o;是正确的啊,为什么换成TextBox就不行了呢
      

  6.   

    if ( o.GetType().ToString() == sender.GetType().ToString())
    {
    MessageBox.Show("类型匹配!");
    }
    else
    {
    MessageBox.Show("类型不匹配!");
    }结果是【类型匹配!】
      

  7.   

    从外部assembly动态创建的对象,只能使用Invoke来访问,一般不能转换为特定的类型,引用的文件不同,虽然是同一个命名空间,但代表的对象不一样,除非当前应用程序引用的是同一个文件。
      

  8.   

    o.GetType() == sender.GetType() 比较的是对象,不相同是应该的吧我写的是 o.GetType().ToString() == sender.GetType().ToString()
      

  9.   

    既然类型都不一样,当然无法转换
    好像也没有这样用文本框的吧
    一般来说
    反射得到的对象,是不会做转换的
    转换,就表示知道是什么对象
    既然知道了,为什么不直接new
    还用反射干什么
    一般都是如jimh(jimmy) 所言
    Invoke方法之类的
      

  10.   

    To: jimh(jimmy)就算第2句不对,第一句应该是对的吧,可是第一名虽然系统没有抛出异常,但如果观察返回的对象的话,可以发现对象内部的属性有的是不正常的
    object examObject = ass.CreateInstance("System.Windows.Forms.TextBox");
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    System.Windows.Forms.Control ct = (System.Windows.Forms.Control)examObject;