问题描述
在.NET/C#的程序开发中,反射中是否提供了一些用以检测指定的类型System.Type
是否实现了某个接口的方法呢?比如有如下的接口和实现:
public interface IMyInterface {}
public class MyType : IMyInterface {}
方案一
你可以使用IsAssignableFrom
来实现,如:
typeof(IMyInterface).IsAssignableFrom(typeof(MyType))
或者使用GetInterfaces
方法,如:
typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))
方案二
创建一个静态扩展方法,然后使用GetInterfaces()
方法,如:
public static bool ImplementsInterface(this Type type, Type ifaceType ) {
Type[] intf = type.GetInterfaces();
for ( int i = 0; i < intf.Length; i++ ) {
if ( intf[ i ] == ifaceType ) {
return true;
}
}
return false;
}
方案三
创建类型帮助类或者类型类型静态方法,如:
public static class TypeHelpers
{
public static Boolean IsAssignableTo(Type type, Type assignableType)
{
return assignableType.IsAssignableFrom(type);
}
public static Boolean IsAssignableTo<TAssignable>(Type type)
{
return TypeHelpers.IsAssignableTo(type, typeof(TAssignable));
}
}
public static class TypeExtensions
{
public static Boolean IsAssignableTo(this Type type, Type assignableType)
{
return TypeHelpers.IsAssignableTo(type, assignableType);
}
public static Boolean IsAssignableTo<TAssignable>(this Type type)
{
return TypeHelpers.IsAssignableTo<TAssignable>(type);
}
}
调用方法:
var isTrue = michelleType.IsAssignableTo<IMaBelle>();
方案四
var type = typeof(MyType);
var implementsInterface = typeof(IMyInterface).IsAssignableFrom(type) && type.IsClass;
或者查询所有实现了接口的类型的方法:
var implementations = typeof(TypeInTargetAssembly).Assembly.GetTypes()
.Where(t => typeof(IMyInterface).IsAssignableFrom(t) && t.IsClass);
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册