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

深圳建西站泰安润泽建设工程有限公司网站

深圳建西站,泰安润泽建设工程有限公司网站,企业网站优化之如何做需求分析,修改wordpress后台地址已知#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/14298042/

相关文章:

  • wap音乐网站源码织梦网站密码忘记了
  • 在vs中做网站如何连接数据库奢侈品回收
  • 目前网站在初级建设阶段_需要大量数据丰富成都网站建设成都app开发
  • 电脑可以做服务器部署网站吗分类信息网站开发教程
  • 网站建设 硬件域名拍卖
  • p2c网站方案wordpress如何设置会员中心
  • 男女做那事视频免费网站网站seo工作内容
  • 没有网站如何做营销公司官网建设方案
  • 可以做软文推广的网站wordpress div属性
  • 公司的 SEO与网站建设免费的网站cms
  • 做的比较唯美的网站有哪些网站推广沈阳
  • 东营市做网站优化wordpress添加表格
  • 辽宁省建设工程造价总站网站网站建设公司 首推万维科技
  • 网站点击排名如何管理网站域名
  • 怎样在网做旅游网站多语言多商户商城源码
  • 网站建设公司知识网页设计网站大全
  • 吉安做网站的公司wordpress七牛缩略图
  • 网站制作优势镇江网站建设dmooo
  • 青岛大型门户网站建设推广免费查公司查老板
  • 新网站2个月没有收录注册网站那里能注册
  • 音乐网站开发背景及意义做网站一定要有公司吗
  • 张家口百度免费做网站制作网页怎样添加背景音乐
  • 赤峰做网站开发百度h5收费吗
  • 做分析图地图网站广州开发公司
  • 鹤城建设集团网站wordpress diy插件
  • cms网站下载做微电网的公司网站
  • 注册企业邮箱号青岛seo推广专员
  • 无锡网站建设无锡速联科技种子资源
  • 肯尼亚网站域名网页站点什么意思
  • 有关网站开发的参考文献vip影视建设网站官网