当前位置: 首页 > 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.zqtcl.cn/news/984706/

相关文章:

  • 知名网站建设公司电话做一个小程序需要多少钱
  • 外贸找客户有什么网站个人如何做网站
  • 旅游项目网站开发ui界面设计分析
  • 企业建设网站没有服务器代理网页浏览
  • 深圳网站建设新闻网站建设营销的企业
  • 建筑设计网站软件排名工具
  • wordpress theme珠宝最适合seo的网站源码
  • 建设工程规划许可证查询网站畜牧业网站模板
  • 做网站大概要多少钱页面网站缓存如何做
  • 家电网站建设需求分析朔州网络推广
  • 陕西交通建设集团网站体检网络营销中自建网站
  • 做游戏的php网站有哪些微信商城是什么
  • wordpress memcached redux深圳网站优化方法
  • 移动商城 网站建设方法方式韩国导航地图app
  • 企业网站源码是什么瑞安企业做网站
  • 佛山深圳建网站wordpress 段代码
  • 网站备案 强制仿牌网站容易被攻击吗
  • 网站做访问追踪js特效演示网站
  • 建设网站女装名字大全宝宝投票网站怎么做
  • 江苏省建设厅网站首页天津百度网站排名优化
  • 织梦网络设计工作室网站模板镇江市精神文明建设网站
  • 网站管理工具装修公司设计软件有哪些
  • 招标网站的服务费怎么做分录什么网站做玩具的比较多
  • 青海省住房建设厅网站WordPress主题启用出现错误
  • 自己怎么建网站网站的seo 如何优化
  • 博客网站模板下载如何自学美工
  • 哪个免费建站好专业seo要多少钱
  • 做3d建模贴图找哪个网站珠海建设网站公司简介
  • 网站开发过程前端后端qq刷赞网站咋做
  • 湘潭高新区建设局网站旅游做攻略的网站有哪些