获取所有程序集中的类
//var eventTypes = AppDomain.CurrentDomain.GetAssemblies()
// .SelectMany(a => a.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IEvent)))).ToArray();
//获取当前程序集中的类
var eventTypes = GetType().Assembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IEvent))).ToArray();
foreach (var type in eventTypes)
{
if (type.IsClass)
{
var obj = Activator.CreateInstance(type);
if (obj is IUpdateEvent)
{
updateEvents.Add(obj as IUpdateEvent);
}
if(...)//不要使用else if,因为可继承多个接口
//继续拓展继承IEvent的类
}
}
public interface IEvent
{
}
public interface IUpdateEvent : IEvent
{
void OnUpdate();
}