日期:2014-05-18  浏览次数:21144 次

关于c#类反射中的抽象类的强制转换问题
我在C#中定义了一个抽象类,并从该抽象类中派生出来了一个类,具体代码如下

C# code

namespace DllTest
{
    abstract class Base
    {
        public abstract void Run();
    }
    class PBase : Base
    {
        public override void Run()
        {
            MessageBox.Show("Overrided Run!");
        }
    }
}




然后我将这个类的定义放在一个C#的类文件中,并编译成了一个DLL的文件。然后我通过类反射中的Activator.CreateInstance(type)来创建PBase类对象的实例,然后再强制转换成Base类,来调用抽象类中的Run方法,但是怎么强制转换都会报错,具体代码贴出来:

C# code


public Form1()
{
            InitializeComponent();
            AssemblyNameProxy ap = new AssemblyNameProxy();
            AssemblyName myAssemblyName = ap.GetAssemblyName("DLLTest.dll");//获取程序名
            Assembly assembly = Assembly.Load(myAssemblyName); //手动加载程序集   
            Type type = assembly.GetType("DllTest.PBase"); //获取程序集中的类型
            object obj = Activator.CreateInstance(type);//创建对象实例
            (obj as DllTest.PBase).Run();
 }




不论我用的是(obj as DllTest.PBase).Run()或者新建一个
Base Ba = (Base)obj;来强制类型转换都要报错。。求各位大哥指点迷津,我实在不知道错在哪里了~先谢谢大家了!


------解决方案--------------------
Base 和 PBase 加public 试试看。
------解决方案--------------------
Base
和PBase 没有加public,缺省认为是private的,所以外部不能访问.加public就好了
------解决方案--------------------
应该就是你的类不是Public的原因。
------解决方案--------------------
探讨
Base
和PBase 没有加public,缺省认为是private的,所以外部不能访问.加public就好了