概述
/// <summary>
/// 反射工厂
/// </summary>
public static class ReflectionFactory
{
private static Dictionary<ETaskType, Type> mDic;
/// <summary>
/// 加载所有的可用的Task
/// </summary>
public static void LoadTask()
{
// 只加载一次
if (mDic != null)
return;
try
{
mDic = new Dictionary<ETaskType, Type>();
string strNamespace = typeof(TaskClass).Namespace;
foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())
{
if (!IsTask(strNamespace, type))
continue;
TaskClass obj = Activator.CreateInstance(type) as TaskClass;
if (obj != null && !mDic.ContainsKey(obj.TaskType))
{
mDic.Add(obj.TaskType, type);
}
}
}
catch (Exception)
{
}
}
/// <summary>
/// 根据类型获取Task
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static TaskClass GetTask(ETaskType type)
{
if (mDic == null)
return null;
// 规则约定 详细见 ETaskType 枚举注释
if ((int)type < (int)ETaskType.SimpleTask)
{
type = ETaskType.SimpleTask;
}
try
{
if (mDic.ContainsKey(type))
return Activator.CreateInstance(mDic[type]) as TaskClass;
}
catch (Exception)
{
}
return null;
}
private static bool IsTask(string strNamespace, Type type)
{
return type.IsClass && !type.IsAbstract && strNamespace.Equals(type.Namespace) && type.IsSubclassOf(typeof(TaskClass));
}
}
最后
以上就是坚定鞋子为你收集整理的反射工厂【ReflectionFactory】的全部内容,希望文章能够帮你解决反射工厂【ReflectionFactory】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复