/* * @Author: 白哉 * @Description: 技能工厂类 * @Date: 2025年04月24日 星期四 17:04:55 * @Modify: */ using System; using System.Collections.Generic; using System.Reflection; namespace Logic.Skill { public class SkillFactory { private static Dictionary _skillDict; public static SkillBase GetSkillBySkillType(SkillType skillType) { if (_skillDict == null) { _skillDict = new Dictionary(); Assembly assembly = typeof(SkillBase).Assembly; // 获取基类所在程序集 foreach (Type skillClassType in assembly.GetTypes()) { if (skillClassType.IsSubclassOf(typeof(SkillBase)) && !skillClassType.IsAbstract) { var skillObj = Activator.CreateInstance(skillClassType); var skillBase = skillObj as SkillBase; if (skillBase == null) continue; _skillDict[skillBase.GetSkillType()] = skillClassType; } } } if (_skillDict.TryGetValue(skillType, out var skillClass)) { return Activator.CreateInstance(skillClass) as SkillBase; } return null; } } }