用反射调用方法
常用于软件架构中
假如你定义好了基类和接口,其他人使用基类派生出新的方法,
你在不知道有多少类会使用此基类派生,但是你需要调用所有的派生类的方法时,就可以这样,直接遍历相同命名空间中的由基类派生的所有类,然后实例化所有类,调用所有方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ReflectMethod
{
class Program
{
private static List<Game> Games = new List<Game>();
//是否退出
private static bool isexit = false;
static void Main(string[] args)
{
//获取程序集所有的类
Type[] types = typeof(Program).Assembly.GetTypes();
//遍历
foreach (Type t in types)
{
// AttributeLogic(t);
//如果是Game本身就下一条
if (t.Name == typeof(Game).Name)
continue;
//判断当前类是否继承Game
if (typeof(Game).IsAssignableFrom(t))
{
//实例一个Game 子类
object reflectTest = Activator.CreateInstance(t);
//注意不能用强制转换,只能用as
Game g = reflectTest as Game;
Games.Add(g);
}
}//找到了程序集所有继承Game的子类了并把它们都放在Games列表里边
foreach (var item in Games)
{
item.start();
}
Console.ReadKey();
}
}
//一个基类
abstract class Game
{
public virtual void start() { }
public virtual void updata() { }
}
//继承Game
class Compent : Game
{
public override void start()
{
Console.WriteLine("my start");
}
public override void updata()
{
Console.WriteLine("updata");
}
}
}