您的位置:程序门 -> .net技术 ->



关于petshop 4.0 中的一个问题不懂


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于petshop 4.0 中的一个问题不懂
发表于:2007-11-08 16:08:58 楼主
public   static   petshop.idal.icategory   createcategory()   {
                        string   classname   =   path   +   ".category";
                        return   (petshop.idal.icategory)assembly.load(path).createinstance(classname);
                }

为什么是     assembly.load(path)   呢...

我不大懂得什么是反射..好像就是现在可以引用这个程序集了...

那我直接把这个程序集引用到程序里面不是也可以吗??

为什么要这样呢....这样做的好处是什么..

请和我讲一下谢谢..我是新人...
发表于:2007-11-08 16:24:231楼 得分:0
反射说俗点就是动态加载dll中的类。这个说法不一定准确哈。。各位大虾不要用板砖拍我

return       (petshop.idal.icategory)assembly.load(path).createinstance(classname);  

“assembly.load(path).”加载dll.
createinstance(classname);   创建类的实例。。

然后强制转换成(petshop.idal.icategory)类型。return   回上层调用去。。
发表于:2007-11-08 16:25:452楼 得分:0
动态的实例对象

比如那个抽象类是那个类的实例
实现这个抽象类的类有很多,根据条件选取
发表于:2007-11-08 16:25:473楼 得分:0
好处就是在你不知道会调用具体那个dll里的那个类时。。反射的意义就体现出来了
发表于:2007-11-08 16:35:414楼 得分:0
可是我把dll文件全引用到程序里面去了..

不是就行了吗??
发表于:2007-11-08 16:36:585楼 得分:0
我不动态加载.我发布程序的时候.我就把所有的dll引用到程序里去.这样不行吗
发表于:2007-11-08 16:53:196楼 得分:0
楼主理解错了,发布程序的时候dll引用到程序里是肯定要的,但要加载程序集里的那个类就要用反射了.动态的加载是比较省资源的.
发表于:2007-11-08 17:07:347楼 得分:0
那怎么样算是不动态的加载   ???
发表于:2007-11-08 17:10:198楼 得分:0
这样的话就可   以根据程序传的参数决定用哪个程序集,path值是从配置文件中读取的
不动态加载就是在程序中固定写的,不是根据配置文件的设置改变程序行为的
发表于:2007-11-08 17:12:559楼 得分:0
动态加载的好处  
1。节省资源,比如,你的项目用到了n个dll。要是全部在程序启动时加载进内存。岂不是对内存资源的浪费??最好是用到时再加载,用那个加载那个。
2。提高系统的可扩展性。比如。一个短信平台项目中,一开始只支持中国移动的cmpp协议。后来加入了中国联通的sgip协议。如果不是动态加载的话。每添加一个新协议的支持就要去修改代码。项目的可维护性就不好了。公司也要付出相应的人力物力。用动态加载,就可以把dll的路径。名字。类的名字都写在配置文件。或者数据库中。添加一个模块,只需要修改一下配置文件,或者在数据库中添加一条纪录就行了。。程序尽量做“活”的,别做“死”的。客户的需求无止境呀。。
发表于:2007-11-08 17:32:1010楼 得分:0
好的.谢谢你们..结帖
发表于:2007-11-08 17:40:0411楼 得分:0
学习一下
发表于:2007-11-09 13:15:0912楼 得分:0
末了问一句..怎么样才算是静态加载呢..     ????
发表于:2007-11-09 13:17:1013楼 得分:0
请问怎么样才算是静态加载呢
发表于:2007-11-09 13:23:1814楼 得分:0
反射学习ing
发表于:2007-11-09 13:40:1315楼 得分:0
这个问题的关键不是动态加载,而是动态的创建对象,由客户决定创建的对象的名字和类型
发表于:2007-11-12 11:00:4016楼 得分:0
学习


快速检索

最新资讯
热门点击