//个人理解 反射一般可以通过配置文件动态创建类而无需修改代码 更加灵活 //例如已知抽象类AbstractPerson namespace Model { public abstract class AbstractPerson { public abstract void dance() { } } }namespace Model { public class Man : AbstractPerson { public override void dance() { Console.WriteLine("男人跳舞"); } } }namespace Model { public class Woman : AbstractPerson { public override void dance() { Console.WriteLine("女人跳舞"); } } }namespace Model { //目前配置文件用C#文件代替 也可以用XML等其他配置文件代替 public static class Config { //人的实体类的配置文件 public static string NS_AB_PER = "Model.Man"; } }namespace Model { public class Program { static void Main(string[] args) { AbstractPerson instance; //第一种反射创建类对象的方式 Assembly asm = Assembly.GetExecutingAssembly(); instance = (AbstractPerson)asm.CreateInstance(Config.NS_AB_PER); //输出男人跳舞 instance.dance();
事先生成对象不行么? --事先生成对象的前提是要知道对象的类型,如果不知道对象的类型,如何能事先生成呢?比如 A a=new A();事先必需知道类型A,否则无法new一个对象出来。为了解决这个问题,就出来了反射及动态生成对象的需求了,一般多用在插件式开发应用中。经过演化就出来了IOC,即所谓的依赖注入了。反射生成一个object类型的对象,在invock它的方法。
泰安二手房 http://www.taianesf.com
例如已知抽象类AbstractPerson
namespace Model
{
public abstract class AbstractPerson
{}
//例如已知抽象类AbstractPerson
namespace Model
{
public abstract class AbstractPerson
{
public abstract void dance() { }
}
}namespace Model
{
public class Man : AbstractPerson
{
public override void dance()
{
Console.WriteLine("男人跳舞");
}
}
}namespace Model
{
public class Woman : AbstractPerson
{
public override void dance()
{
Console.WriteLine("女人跳舞");
}
}
}namespace Model
{
//目前配置文件用C#文件代替 也可以用XML等其他配置文件代替
public static class Config
{
//人的实体类的配置文件
public static string NS_AB_PER = "Model.Man";
}
}namespace Model
{
public class Program
{
static void Main(string[] args)
{
AbstractPerson instance;
//第一种反射创建类对象的方式
Assembly asm = Assembly.GetExecutingAssembly();
instance = (AbstractPerson)asm.CreateInstance(Config.NS_AB_PER);
//输出男人跳舞
instance.dance();
//当需要修改跳舞的对象为女人时 不需要修改任何代码 只需要修改配置文件就可以完成
//修改配置文件Config的NS_AB_PER = "Model.Woman"
//第二种反射创建类对象的方式
ObjectHandle handler = Activator.CreateInstance(null, Config.NS_AB_PER);
instance = (AbstractPerson)handler.Unwrap();
//输出女人跳舞
instance.dance();
}
}
}
--事先生成对象的前提是要知道对象的类型,如果不知道对象的类型,如何能事先生成呢?比如 A a=new A();事先必需知道类型A,否则无法new一个对象出来。为了解决这个问题,就出来了反射及动态生成对象的需求了,一般多用在插件式开发应用中。经过演化就出来了IOC,即所谓的依赖注入了。反射生成一个object类型的对象,在invock它的方法。