反射 通过父类获取所有子类

 1  public void AddStates()
 2         {
 3 
 4             var subTypeQuery = from t in Assembly.GetExecutingAssembly().GetTypes()
 5                                where IsSubClassOf(t, typeof(State))
 6                                select t;
 7 
 8             foreach (var type in subTypeQuery)
 9             {
10                 var stateObj = Activator.CreateInstance(type) as State;
11                 stateObj.Action();
12                 if (!states.Contains(stateObj))
13                     states.Add(stateObj);
14             }
15         }
16 
17         static bool IsSubClassOf(Type type, Type baseType)
18         {
19             var b = type.BaseType;
20             while (b != null)
21             {
22                 if (b.Equals(baseType))
23                 {
24                     return true;
25                 }
26                 b = b.BaseType;
27             }
28             return false;
29         }

 

posted @ 2016-07-30 15:14  1A7487  阅读(2624)  评论(0编辑  收藏  举报