当前位置: 首页 > news >正文

网站开发设计文案/关键词搜索神器

网站开发设计文案,关键词搜索神器,如何使用万网主机建设网站,域名网址注册1. Assembly中的类要从MarshalByRefObject继承,如果你想从你自己的类来继承,那么请选用interface或者继续研究其他解决方案。点击(此处)折叠或打开 namespace Library { public class MyClass : MarshalByRefObject { }} 其中MyClass的方法的返…
1.  Assembly中的类要从MarshalByRefObject继承,如果你想从你自己的类来继承,那么请选用interface或者继续研究其他解决方案。

点击(此处)折叠或打开

  1. namespace Library
    {
  2.     public class MyClass : MarshalByRefObject
  3.     {
  4.     }
  5. }

其中MyClass的方法的返回值和参数必须是简单类型或者可序列化的。
2. 调用程序中,实现一个加载Assembly的辅助类,比如叫做LoadHelper,它也从MarshalByRefObject继承。在这个类里对Type的方法作一些封装,完成对MyClass中的方法的调用。如:

点击(此处)折叠或打开

  1. //name:方法名
  2. public object InvokeMethod(string name, object obj, object[] paras)
  3.         {
  4.             return obj.GetType().InvokeMember(name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, paras);
  5.         }

Type的其他方法也可以在此进行封装。总而言之,把需要进行反射的代码都写在这里。封装的形式可以有多种方式,上面这个方法是在外部创建了一个对象实例,调用时传递给这个方法,再通过反射调用其方法。其实这种方式是效率比较低的,因为那个obj要在两个AppDomain之间传递,而跨AppDomain传递对象是要将这个对象序列化和反序列化的。所以为了改善效率,可以在这里临时创建对象。
比如:

点击(此处)折叠或打开

  1. public object InvokeInstanceMethodNotCachedAsm(string name, string assemblyFile, string typeName, object[] paras)
  2.         {
  3.             object obj;
  4.             Assembly asm = Load(assemblyFile);
  5.             obj = asm.CreateInstance(typeName);
  6.             return obj.GetType().InvokeMember(name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, paras);
  7.         }
甚至还可以采取将Assembly缓存的机制,这样调用起来速度更快。
3.调用程序中加载和卸载AppDomain:

点击(此处)折叠或打开

  1. static void Load()
  2.         {
  3.             AppDomainSetup setup = new AppDomainSetup();
  4.             setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
  5.             setup.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
  6.             setup.ShadowCopyFiles = "true";
  7.             setup.ShadowCopyDirectories = "需要动态加载的Assembly所在文件夹";//影像副本目录
  8.             setup.ApplicationName = "Dynamic";
  9.             // Set up the Evidence
  10.             Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
  11.             Evidence evidence = new Evidence(baseEvidence);
  12.             // Create the AppDomain     
  13.             appDomain = AppDomain.CreateDomain("newDomain", evidence, setup);
  14.             loader = (LoadHelper)appDomain.CreateInstanceAndUnwrap("程序的AssemblyName", "那个辅助类的全名");
  15.         }
  16.         static void Unload()
  17.         {
  18.             AppDomain.Unload(appDomain);
  19.         }
在这里,有三点是关键,一是创建一个新的AppDomain,二是让这个新的AppDomain允许使用影像副本文件,三是要把影像副本目录设为非主程序所在文件夹。
这是因为.Net不允许卸载一个已加载的Assembly,除非卸载整个AppDomain,允许使用影像副本,.Net就把要加载的Assembly复制到另一个文件夹(在用户配置文件夹中),但程序所在文件夹中的Assembly并不被复制。

4.创建对象实例
object  obj = appDomain.CreateInstanceFromAndUnwrap("Assembly文件名含路径",  "类名");
这样就创建了一个指定的类的实例,但是,不要试图对这个obj进行反射,对这个obj进行反射,不能得到其实际类型的信息,因为在主程序文件夹中没有部署那个Assembly,而只会得到其已部署的基类和接口类型,只能对这些类型进行操作。
5. 调用
如果在主程序的AppDomain中加载了所创建的对象的基类或者接口类型,那么可以调用这些类型的相关成员。
如果没有,那么就通过调用LoadHelper中的相关方法来调用。
6.卸载与替换
程序运行起来后,Assembly所在文件夹中的这个已加载的Assembly文件,是可以被删除的,因为实际上加载的那个文件是其副本,删除之后程序照样运行,而替换一个新的,也不会起作用。只有当调用上面的Unload和Load方法,卸载和重新加载后,新的Assembly才会起作用.
http://www.jmfq.cn/news/4747519.html

相关文章:

  • 住房建设部投诉网站/免费的外链网站
  • 电子工程建设/搜索引擎优化关键词选择的方法有哪些
  • wordpress信用卡收款/手机优化
  • 独立建站什么意思/网络推广自学
  • 网站备案证书下载密码忘了/今日资讯最新消息
  • 网站建设引擎/百度资源搜索
  • 活动发布类网站开发/营销软文范例500
  • 济南做网站/品牌网络推广
  • 在centos上做网站/谷歌推广方案
  • 建设网站企业邮箱/百度企业网盘
  • wordpress开通多站点好处/电子商务网站设计方案
  • 地方新闻网站好坏/怎样免费给自己的公司做网站
  • 常宁做网站/nba篮网最新消息
  • php网站开发价格/网络广告案例以及分析
  • wordpress客服插件/杭州专业seo
  • 永春网站建设/软文推广哪个平台好
  • 安阳做网站电话/怎么样做一个自己的网站
  • 沈阳网络关键词排名/windows优化大师的优点
  • 制作网站需要学什么软件/seo外包 杭州
  • 做论坛网站看什么书/备案查询官网
  • 建设部招标网 官方网站/百度投诉中心24人工客服电话
  • 网站被百度蜘蛛爬死了/nba在线直播免费观看直播
  • 企业为什么要自助建站/知乎推广渠道
  • 网上兼职做效果图网站/网站关键词提升
  • 网站建设国内外研究进展/网上推广培训
  • wordpress主题 大/seo网站平台
  • 源代码代做网站/百度搜索词热度查询
  • 添加网站备案号链接/营销培训课程
  • 垂直门户网站/google store
  • 电商运营培训课程/谷歌优化排名怎么做