关于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就好了