请问,反射中的,动态生成对象
有啥实际意义啊,我没遇到过
为什么要动态生成对象呢,事先生成对象不行么?
请举例说明,实际作用

解决方案 »

  1.   

    反射就是动态的加载dll文件,一般和类工厂一起用的,还有缓存机制,一般在三层结构中用到,你可以搜下 三层架构。
     泰安二手房 http://www.taianesf.com 
      

  2.   

    个人理解 反射一般可以通过配置文件动态创建类而无需修改代码 更加灵活
    例如已知抽象类AbstractPerson
    namespace Model
    {
        public abstract class AbstractPerson
        {}
      

  3.   

    最常见就是就通过配置文件来生成对象,结合接口来实现松耦合及扩展。比如你定义了一个接口,里面有个函数叫做 GetMoney(....)来获取从你的银行卡的余额。而最终实现这个接口获取余额,建行,农行等都不一样,具全实现也不一样,你可以通过配置来动态生成(反射)。这里只是打个比方,可以参考一下,IoC容器、DependencyInjection模式等实现方式。
      

  4.   

    //个人理解 反射一般可以通过配置文件动态创建类而无需修改代码 更加灵活
    //例如已知抽象类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();
                
            }
        }
    }
      

  5.   

    http://www.cnblogs.com/yhql/archive/2011/09/07/2169464.html
      

  6.   

    事先生成对象不行么?
    --事先生成对象的前提是要知道对象的类型,如果不知道对象的类型,如何能事先生成呢?比如 A a=new A();事先必需知道类型A,否则无法new一个对象出来。为了解决这个问题,就出来了反射及动态生成对象的需求了,一般多用在插件式开发应用中。经过演化就出来了IOC,即所谓的依赖注入了。反射生成一个object类型的对象,在invock它的方法。
      

  7.   

    复杂的说,就是实现类似Dependency Injection之类的,简单的说,就是把类名放在配置文件或者数据库中,程序读取字符串形式的类名,用反射生成保存在字符串中的类,