如果对象在C#中实现给定接口,最简单的测试方法是什么?(用Java回答这个问题 )
if (object is IBlah)
要么
IBlah myTest = originalObject as IBlah if (myTest != null)
如果在编译时知道接口类型并且具有要测试的类型的实例,则使用is
或as
运算符是正确的方法.其他人似乎没有提到的是Type.IsAssignableFrom
:
if( typeof(IMyInterface).IsAssignableFrom(someOtherType) ) { }
我认为这比查看返回的数组要简洁得多,GetInterfaces
并且具有为类工作的优势.
对于实例:
if (obj is IMyInterface) {}
对于班级:
检查是否typeof(MyClass).GetInterfaces()
包含接口.
关于@AndrewKennan的答案的一个变体我最近最终用于运行时获得的类型:
if (serviceType.IsInstanceOfType(service)) { // 'service' does implement the 'serviceType' type }
如果要在检查后使用类型转换对象:
从C#7.0开始:
if (obj is IMyInterface myObj)
这是一样的
IMyInterface myObj = obj as IMyInterface; if (myObj != null)
请参阅.NET Docs:使用#Type模式匹配is
模式
这个帖子是一个很好的答案。
public interface IMyInterface {} public class MyType : IMyInterface {}
这是一个简单的示例:
typeof(IMyInterface).IsAssignableFrom(typeof(MyType))
要么
typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))