当前位置:  开发笔记 > 编程语言 > 正文

测试对象是否实现接口

如何解决《测试对象是否实现接口》经验,为你挑选了6个好方法。

如果对象在C#中实现给定接口,最简单的测试方法是什么?(用Java回答这个问题 )



1> Robert C. Ba..:
if (object is IBlah)

要么

IBlah myTest = originalObject as IBlah

if (myTest != null)


+1第二个更好,因为你可能最终需要使用第一个投射,从而给你两个演员阵容("是",然后是一个显式演员).使用第二种方法,您只需施放一次.
@Andrew:+1; 时间再次[链接](http://www.boyet.com/Articles/DoubleCastingAntiPattern.html)到[Julian M Bucknall]的经典Double-Casting AntiPattern博客文章(http://www.boyet.com) .
自C#6.0起:`if(object is IBlah iblah){iblah.SomeMethod(); }`

2> Andrew Kenna..:

如果在编译时知道接口类型并且具有要测试的类型的实例,则使用isas运算符是正确的方法.其他人似乎没有提到的是Type.IsAssignableFrom:

if( typeof(IMyInterface).IsAssignableFrom(someOtherType) )
{
}

我认为这比查看返回的数组要简洁得多,GetInterfaces并且具有为类工作的优势.


你可能最好在另一个问题中问这个问题.如果someType是列表元素的类型,则可能需要typeof(IList <>).MakeGenericType(someType).如果someType是列表类型,则应查看Type.GetGenericArguments和Type.GetGenericTypeDefinition.

3> Rauhotz..:

对于实例:

if (obj is IMyInterface) {}

对于班级:

检查是否typeof(MyClass).GetInterfaces()包含接口.


或:if(typeof(MyClass).GetInterfaces().Contains(typeof(IMyInterface))){...}

4> famousgarkin..:

关于@AndrewKennan的答案的一个变体我最近最终用于运行时获得的类型:

if (serviceType.IsInstanceOfType(service))
{
    // 'service' does implement the 'serviceType' type
}



5> Martin Schne..:

如果要在检查后使用类型转换对象:
从C#7.0开始:

if (obj is IMyInterface myObj)

这是一样的

IMyInterface myObj = obj as IMyInterface;
if (myObj != null)

请参阅.NET Docs:使用#Type模式匹配is模式



6> eliasetm..:

这个帖子是一个很好的答案。

public interface IMyInterface {}

public class MyType : IMyInterface {}

这是一个简单的示例:

typeof(IMyInterface).IsAssignableFrom(typeof(MyType))

要么

typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有