我在C#中定义了一个抽象类,并从该抽象类中派生出来了一个类,具体代码如下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方法,但是怎么强制转换都会报错,具体代码贴出来: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;来强制类型转换都要报错。。求各位大哥指点迷津,我实在不知道错在哪里了~先谢谢大家了!
{
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方法,但是怎么强制转换都会报错,具体代码贴出来: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;来强制类型转换都要报错。。求各位大哥指点迷津,我实在不知道错在哪里了~先谢谢大家了!
(PBase)obj 类型“DllTest.PBase”同时存在于“DLLTest.dll”和“DllTest.exe”中
这是什么情况?