C#判断某个类是否实现了某个泛型接口

需求:当前有一个数据队列,要求该数据队列中的所有对象必须是实现了IObjGroup的类型,如果哪个对象不满足,就输出出来。

public interface IObjGroup<T>{}
public class PeopleManager : MonoBehaviour, IObjGroup<PeopleGroup>{}
public class ValidationManager{}

已知泛型接口:IObjGroup<T>,一个实现该接口的类PeopleManager,一个没有实现该接口的类ValidationManger。

private List<object> listManager;
listManager = new List<object>();

PeopleManager peopleManager = new PeopleManager();
ValidationModule validationModule = new ValidationModule();

listManager.Add(peopleManager);
listManager.Add(validationModule);

实例化这两个类型的对象,放进一个object队列中,遍历该队列,找出没有实现IObjGroup接口的类型:

for (int i = 0;i < listManager.Count;i++)
{
        var interfaces = listManager[i].GetType().GetInterfaces();
        bool hasImplemented = false;
        if (interfaces.Length > 0)
        {
            foreach (var inter in interfaces)
            {
                var t = inter.GetGenericTypeDefinition();
                if (t == typeof(IObjGroup<>))
                {
                    hasImplemented = true;
                    break;
                }
            }
        }
        if(!hasImplemented)
        {
            Debug.LogError(listManager[i].GetType() + " class do not implement IObjGroup Interface");
        }
}

先取出每个对象类型所实现的所有接口(接口数为0的肯定没实现,直接报错跳出),再遍历实现的所有接口,如果有IObjGroup,就直接跳出,当该对象类型所有接口遍历完发现没有实现IObjGroup接口,报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值