IsAssignableFrom和GetInterface有什么区别?

时间:2020-03-06 14:24:45  来源:igfitidea点击:

在.Net中使用反射,两者之间有什么区别?

if (foo.IsAssignableFrom(typeof(IBar)))

if (foo.GetInterface(typeof(IBar).FullName) != null)

哪个更合适,为什么?

一个或者另一个何时会失败?

解决方案

如果我们只想查看某个类型是否实现了给定的接口,那么两种方法都可以,尽管GetInterface()可能更快,因为IsAssignableFrom()比GetInterface()进行的内部检查更多。检查Type.GetInterfaces()的结果可能会更快,该结果将返回相同的内部列表,而其他两个方法都将使用此列表。