我在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;来强制类型转换都要报错。。求各位大哥指点迷津,我实在不知道错在哪里了~先谢谢大家了!
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;来强制类型转换都要报错。。求各位大哥指点迷津,我实在不知道错在哪里了~先谢谢大家了!
解决方案 »
- C# 或 Sql 中常用代码集锦 散分了!!
- socket客户端的一个端口同时发送多个文件应该做不到吧
- windows服务能自己重启自己吗?
- 为什么找不到LinearGradientBrush渐变画笔?
- 请教webclient远程上传中文文件名乱码的问题
- 如何写C#应用程序去遍历(查找)注册表中的某个键值?
- 求助:怎么让gridview中的某几条网格线加粗显示?
- 关于打印队列的问题:队列中有几条打印记录,我监控时得的内容都是一样的,WHY(C#)
- 我在运行程序中拖动控件的位置,下次我重新进入程序中,怎么才能使控件就在我上次拖放的位置??
- [Cool]自动扫雷程序,大家一起来完善!
- C# UDPClient网络编程问题
- 着急啊!大牛们!winform VCap2860sdk的摄像头录像问题
和PBase 没有加public,缺省认为是private的,所以外部不能访问.加public就好了