c# – 如何查看类型是否实现了接口?
我需要知道Type是否实现了接口.
Dim asmRule As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Rule.dll")) For Each typeAsm As System.Type In asmRule.GetTypes If TypeOf typeAsm Is Rule.IRule Then 'that does always return false even though they implement IRule' End If Next 谢谢大家.现在我知道为什么typeof不起作用.该类型自然不实现IRule.我从你的答案中筛选出两个选项: > GetType(Rule.IRule).IsAssignableFrom(typeAsm) 根据表现选择更好的是什么? 更新:我发现使用它可能更好: Not typeAsm.GetInterface(GetType(Rule.IRule).FullName) Is Nothing 代替 GetType(Rule.IRule).IsAssignableFrom(typeAsm) 因为如果我尝试创建一个实例,接口IRule本身可以赋予IRule,它会引发MissingMethodExcpetion: ruleObj = CType(Activator.CreateInstance(typeAsm,True),Rule.IRule) UPDATE2: If GetType(Rule.IRule).IsAssignableFrom(typeAsm) AndAlso Not typeAsm.IsAbstract Then 解决方法
TypeOf …继承可以正常工作:
Imports System Public Class Test Public Shared Sub Main() Dim o As Object = 5 If TypeOf o Is IFormattable Then Console.WriteLine("Yes") End If End Sub End Class 这与C#中的“is”的工作方式相同. 但是,在您的示例中,该尝试查看System.Type(或实际使用的任何子类)是否实现Rule.IRule.这不起作用…因为您对System.Type是否实现接口不感兴趣,您对typeAsm变量引用的System.Type实例是否实现IRule.Rule感兴趣. 换句话说,你的代码在C#中也不会有更好的效果.在谈论System.Type的一个实例时,你需要 If GetType(Rule.IRule).IsAssignableFrom(typeAsm) Then (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |