需求:当前有一个数据队列,要求该数据队列中的所有对象必须是实现了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接口,报错。