我现在有一个类,同时继承了一个类和一个接口,比如
public SomeClass : Form, IAddin但是当我用反射的时候,首先我用typeof(IAddin).IsAssignableFrom(t),会返回false,
这里t就是我反射时取到的Type,我只能用GetInterface方法来解决这个问题接着,我用(IAddin)Activator.CreateInstance(t)却告诉我Invalid Cast,我实在不明白
是什么原因,请指教!!
public SomeClass : Form, IAddin但是当我用反射的时候,首先我用typeof(IAddin).IsAssignableFrom(t),会返回false,
这里t就是我反射时取到的Type,我只能用GetInterface方法来解决这个问题接着,我用(IAddin)Activator.CreateInstance(t)却告诉我Invalid Cast,我实在不明白
是什么原因,请指教!!
解决方案 »
- 急! 求C#和openGL设计小游戏的相关代码
- datagridview怎么设置每行的颜色呀
- 急!那位大侠知道如何屏蔽word工具栏上的右键菜单?
- 大家推荐一个好的ORM建模工具~~~
- WinForm为何在button里改了数据库的记录,在datagrid却不能及时刷新?
- 数据的有效性检验.
- 怎么编程设置richtextbox的光标位置?
- 横向SQL查询出来内容竖向为日期用哪个空间好
- Objects in this class cannot be updated outside an edit session
- 学的c#,现在让我做升级客户端之类的。用到xml,请问xml到底是什么。
- 如何实现windows系统任务栏效果?
- c#+MapX开发地图标绘
把t换为t.FullName试试
请问接口有实例吗?
public SomeClass : Form, IAddin 但是当我用反射的时候,首先我用typeof(IAddin).IsAssignableFrom(t),会返回false,
这里t就是我反射时取到的Type,我只能用GetInterface方法来解决这个问题
-----------------------------------------------------------------
t 没有实现 IAddin 接口接着,我用(IAddin)Activator.CreateInstance(t)却告诉我Invalid Cast,我实在不明白
是什么原因,请指教!!
-----------------------------------------------------------------
因为 t 没有实现 IAddin 接口,因此实例化的对象无法做类型转换
我能GetInterface("IAddin ")至少说明我继承了接口
1. 判断 t 是否是一个空引用 (null)
2. Console.WriteLine(t.FullName)
1、从global开始写,写全NameSpace
2、确认没有版本问题,版本不同的两个IAddon也会被认为是两个不同的IAddon(或者将引用部分的特定版本置为false)
{
if (type.IsClass && type.IsPublic && !type.IsAbstract && type.GetInterface(iUIFrameworkService) != null)
{
ui = (IUIFrameworkService)asm.CreateInstance(type.FullName);
if (null != ui)
{
}
break;
}
}这种加载肯定是可以的,不知道你怎么用的。
参考一下吧
再放几个目前测试的情况:
1、先不考虑反射,SomeClass sc = new SomeClass(); IAddin isc = (IAddin)sc; 这样写结果都正确,说明SomeClass是能够正确cast到接口的。
2、在反射中,如果这样写(Form)Activator.CreateInstance(t)是可以正确cast的,毕竟SomeClass是继承了Form类
如果你在两个工程里分别都定义了 IAddin 接口,就算方法什么都一模一样都不行。
必须在一个中间的工程中定义公共的接口。
CLR via C#那本书上有写。
可能是因为你本机的运行环境中没有IAddin这个类型或者这个类型版本不一致导致了不能被强制转换。 对于你的实际运行环境这个类只能被当成“Object”来处理,所以你只能通过GetMethod等方式来获取方法信息并使用Invoke来调用方法而不能被强制使用。
------
第一次做这样的东西,经验不足,也没看仔细。
现在的问题就是我怎么做一个registration/discovery mechanism?要把我的程序做成强命名吗?
有什么资料可以看?
欢迎大家继续帮助我。不管怎样,我下班之前结贴。^_^