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