写unity打AB包工具的时候
想通过一个接口调用方法添加ab包依赖关系
接口:
interface Interface_Test
{
void Interface_void();
}
父类:
class BaseClass
{
protected void BaseClass_Void()
{
Console.WriteLine("我被调用");
}
public string BaseClass_VoidPublic()
{
return "------------";
}
}
子类:
class Class1 : BaseClass, Interface_Test
{
public void Interface_void()
{
BaseClass_Void();
}
}
class Class2 : BaseClass, Interface_Test
{
public void Interface_void()
{
BaseClass_Void();
}
}
class Class3 : BaseClass, Interface_Test
{
public void Interface_void()
{
BaseClass_Void();
}
}
通过接口查询实现接口的类:
1、通过反射获取 所有的类
Assembly ass = Assembly.GetAssembly(typeof(Interface_Test));
Type[] types = ass.GetTypes();
2、遍历所有的类判断该类是否是实现了接口
foreach (Type item in types)
{
if (item.IsInterface) continue;//判断是否是接口
Type[] ins = item.GetInterfaces();
foreach (Type ty in ins)
{
if (ty == typeof(Interface_Test))
{
list.Add(item);
}
}
}
3、调用实现接口的类中的公共方法
foreach (Type item in list)
{
object obj = Activator.CreateInstance(item);//创建一个obj对象
MethodInfo mi = item.GetMethod("Interface_void");
mi.Invoke(obj, null);//调用方法
mi = item.GetMethod("BaseClass_VoidPublic");
string s = mi.Invoke(obj, null) as string;//调用有返回值的方法,使用 as 关键字 转换返回的类型
Console.WriteLine(item);
}