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

网站开发学习方法中文网站建设方案

网站开发学习方法,中文网站建设方案,网站制作排行榜,企业网站制作哪些公司制作已知#xff0c;子类B继承自父类A#xff0c;但是在代码运行时#xff0c;B类强制转换为A类#xff0c;却报代码转换异常。 很奇怪的问题吧#xff0c;不过这个也是难得机会#xff0c;去研究C#运行的底层原理。 下面是报错的代码片段。 string className _shapeRefle…已知子类B继承自父类A但是在代码运行时B类强制转换为A类却报代码转换异常。 很奇怪的问题吧不过这个也是难得机会去研究C#运行的底层原理。 下面是报错的代码片段。 string className _shapeReflectMap[typeName].ClassName; Assembly assem _shapeReflectMap[typeName].Assem; Object obj assem.CreateInstance(className); // 在dll程序集中 通过className实例化获取子类 Type type1 obj.GetType().BaseType; // 获取父类类型 Type type2 typeof(Shape); Assembly assembly1 type1.Assembly; Assembly assembly2 type2.Assembly; string codeBase1 assembly1.CodeBase; string codeBase2 assembly2.CodeBase; try {shape (Shape)obj; } catch (Exception e) {throw new Exception(反射创建Shape失败 \n类型直接比较: (type1 type2) \n程序集直接比较: (assembly1 assembly2) \n类型全名比较: (type1.FullName type2.FullName) : type1.FullName type2.FullName \n程序集全名比较: (assembly1.FullName assembly2.FullName) : assembly1.FullName assembly2.FullName \ncodeBase1: codeBase1 \ncodeBase2: codeBase2 \n程序集路径比较: (codeBase1 codeBase2) \ncodeBase1.hash: codeBase1.GetHashCode() \ncodeBase2.hash: codeBase2.GetHashCode() \n, e); }下面是报错结果其中的敏感字符串被替换成了xxx System.Exception: 反射创建Shape失败 类型直接比较: False 程序集直接比较: False 类型全名比较: True: xxx.WpfPlugin.Shape xxx.WpfPlugin.Shape 程序集全名比较: True: xxx.WpfPlugin, Version1.0.0.0, Cultureneutral, PublicKeyTokennull xxx.WpfPlugin, Version1.0.0.0, Cultureneutral, PublicKeyTokennull codeBase1: file:///D:/project/XXX/xxx.xxxClient.UI/xxx.xxxClient.UI/bin/Debug/Plugins/xxx.WpfPlugin.dll codeBase2: file:///D:/project/XXX/xxx.xxxClient.UI/xxx.xxxClient.UI/bin/Debug/Plugins/xxx.WpfPlugin.dll 程序集路径比较: True codeBase1.hash: -336973287 codeBase2.hash: -336973287--- System.InvalidCastException: 无法将类型为“xxx.WpfPlugin.Shapes.ImageButton”的对象强制转换为类型“xxx.WpfPlugin.Shape”。在 xxx.WpfPlugin.ctlUI.LoadXml(String xmlPath) 位置 D:\project\XXX\dll\PluginsSources\xxx.WpfPlugin\ctlUI.cs:行号 107--- 内部异常堆栈跟踪的结尾 ---在 xxx.WpfPlugin.ctlUI.LoadXml(String xmlPath) 位置 D:\project\XXX\dll\PluginsSources\xxx.WpfPlugin\ctlUI.cs:行号 111在 xxx.WpfPlugin.ctlUI.DisplayInit() 位置 D:\project\XXX\dll\PluginsSources\xxx.WpfPlugin\ctlUI.cs:行号 177通过上面的代码可以看出从子类中获取的父类type和父类直接获取的type是完全一样的命名空间类名称程序集和对应的dll文件均相同。但是通过判断其在内存中并非同一个对象。 经过排查发现代码中对该dll加载了两次获得了两个程序集而子类和父类分别来自不同的程序集导致了无法进行类型转换。在修复该dll加载逻辑后问题便得到了解决。 可以推测出C#判断两个类是否完全相同除了看命名空间和类名以外主要是判断两个类是否在同一个程序集实体中内存中的同一个实体。若一个dll加载了两遍获得两个程序集对象虽然两个程序集中的类完全相同但是依然无法相互转换。 所以程序集最好有一个公共的存放处统一的加载逻辑不要养成需要某个类时直接去加载一遍dll的坏习惯。 也可以通过Assembly.GetExecutingAssembly()直接获取当前代码所在的程序集避免重复加载。
http://www.hkea.cn/news/14371998/

相关文章:

  • 沧州wap网站制作好用的种子搜索引擎
  • 哪里有html5网站建设重庆建筑人才网官网
  • 装饰网站建设流程东莞最大的网络公司
  • 网页制作工具按其制作方式有几种类型刷关键词排名seo软件
  • 玉山网站建设wordpress 主题 汉化教程
  • 明星粉丝网站怎么做的中国建筑网官网平台
  • 帝国cms建站系统win7创建wordpress
  • html网站登录界面模板下载网站开发常用技术
  • 网站开发 企业 定制系统策划公司取名字大全
  • 电子商务网站建设合同签订媒体网站 建设网络强国
  • 松江区环保局网站建设项目备案python官方网站
  • 网站建设的培训的感受做企业网站好的
  • 甘肃网站推广网站meta 优化建议
  • 禅城网站建设联系电话上海建设银行网站莘庄
  • 网站开发示例桂林市建设工程交易中心
  • 什么网站出项目找人做天津网站制作网站
  • 建设工程网站tc太原模板建站软件
  • 实例网站制作教程eclipse 网站开发学习
  • 贵阳网站建设端觉html网站自带字体怎么做
  • php网站开发框架有哪些有专业做网站优化的吗
  • 天津网站建设方案托管企业网站需要备案吗
  • wordpress博客投稿seo课程哪个好
  • 网站seo排名公司长沙app定制开发
  • 资料共享的网站开发帮网站网站做推广被抓会判刑吗
  • 如何选择网站托管公司做企业的网站都要准备什么手续
  • 怎样查网站有没有做CDN加速wordpress 首页单页
  • 河北省建设工程造价管理协会网站织梦网站导航浮动
  • 山东app网站制作网站新闻页面无法翻页
  • 网站开发文档需求撰写word广告设计制作安装合同
  • 知名网站的org域名安徽省建设银行网站