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

佛山免费发布信息的网站长沙有哪些做网站的公司

佛山免费发布信息的网站,长沙有哪些做网站的公司,办公室装修怎么做账,宜春做网站 黑酷seo派生类这是上面Citizen类的一个子类#xff1a;下面我重写object.Equals() 方法#xff1a;大部分逻辑都在base.Equals()方法里了#xff0c;首先如果父类的Equals()方法返回false#xff0c;那么下面也就不用做啥了。但是如果父类Equals()认为这两个实例是相等的#xff… 派生类这是上面Citizen类的一个子类 下面我重写object.Equals() 方法大部分逻辑都在base.Equals()方法里了首先如果父类的Equals()方法返回false那么下面也就不用做啥了。但是如果父类Equals()认为这两个实例是相等的这就意味着父类里所有的相等性检查都通过了然后我们仍然需要检查派生类里面的独有字段属性而这个例子里只有一个字段属性。然后别忘了实现GetHashCode()方法resharper生成的代码这个方法里使用了父类的GetHashCode()方法把它按位异或IdCard的GetHashCode()的结果。 然后实现和!操作符好现在我们来测试一下其结果如下这个结果还都是对值进行比较的符合预期。 然后你可能以为这样实现没有问题了。。。。陷阱 现在我在Citizen这个父类里修改一下的实现我想让它更有效率然后我再执行和上面同样的测试代码其结果输入是 ?全都相等了。。。。肯定不对。。 那在父类里的方法设一下断点看看这里面x和y其实都是BeijingCitizen的实例但是现在所处的位置是其父类Citizen的方法里所以相等性检查会在这里发生所以这个相等性检查只会检查父类里面的字段Citizen这个类无法知道其它继承于它的类型所以这里也无法比较派生类独有的字段在这里就是IdCard。而所有这些实例的不同值就去别再IdCard这个派生类的字段上面了所以所有检查的结果都是相等的因为只比较了父类的那两个字段。为什么会调用Citizen父类的方法呢因为该方法是静态的也就不是virtual的。而我的测试代码其参数类型是父类Citizen所以ab这句话会在编译时就决定采取哪个版本的实现而编译器在这个方法里会看到a和b的类型都是Citizen所以它会调用Citizen版本的实现。 所以这确实是一个陷阱。 但是为什么原来的写法就没有问题呢原来的写法里在Citizen这个父类里的实现调用了 object的静态Equals()方法而在这个静态Equals方法里又调用了object的virtual Equals()方法而如果实际类型是BeijingCitizen的话那么就会调用override的Equals()方法我们单独看这个比较在BeijingCitizen里设一个断点可以看到会击中该断点。也可以看一下CallStack 现在再次运行所有测试其结果就是正确的了。 所以说相等性检查的逻辑需要放在virtual的方法里。 如果再往上一级把参数都变成object类型输出结果是这是因为的实现不是virtual的在object类型上使用就是判断引用的相等性。而你也无法在重载操作符来防止上述事情的发生因为这段代码永远不会调用到你的操作符重载方法。 那么结论就是在操作符重载方法里调用vitual的方法就可以应付继承相关的相等性判断但是至少也得输入你定义的父类的类型Citizen好让你定义的操作符重载方法可以被最先调用。如果要满足继承、相等性这两方面的要求那么就需要牺牲类型安全:所以操作符重载可以看作一种方便的语法糖法同时也把类型不安全的Equals()方法包装了起来。 为什么不实现IEquatableT 如果我在Citizen类里面实现了该接口那么方法里的调用也还是调用virtual的Equals()否则的话还是一样的bug。那么这样看的话实现该接口几乎没有什么新鲜的作用虽然说该方法可以做到一定程度的类型安全但是性能上比直接调用object.Equals()更慢了。所以针对引用类型不建议实现IEquatableT接口。 非得实现的话建议sealed例如这样的话我们就可以把判断相等的逻辑写在该方法里了因为这个类是sealed所以能传递到这个方法里的变量一定是该类型的没有继承的存在我们就可以同时拥有类型安全和相等性了。 为sealed的class实现IEquatableT接口肯定是可行的但是否值得呢优点能得到微小的性能提升string就是个例子。缺点class本身就更复杂了你需要记住3种实现相等性判断的方式。。。综上个人建议是针对引用类型不去实现IEquatableT接口。.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://wiki.neutronadmin.com/news/245947/

相关文章:

  • 公众号开发者多次群发wordpress路径优化
  • 比较出名的设计网站免费好用的crm系统
  • 免费的网站登录模板下载手机定制app
  • 网站建设 温州房产公司网站建设方案ppt
  • 做程序的网站视差 长沙做网站
  • 淘宝网站都是怎么做的吗免费行情网站app大全下载
  • 做网站和程序员哪个好点如何自己制作链接内容
  • 上市公司协会网站建设汇报京东网站的建设与发展前景
  • 如何降低网站相似度哪些网站专做新闻
  • php网站开发源码免费成品网站那里好
  • 有哪些公司的网站做的比较好自己怎么优化网站
  • 网站如何做导航餐饮企业网站源码
  • 商城开发网站建设开发海淀区seo引擎优化
  • 网站开发公司名字自己怎么做百度推广
  • 微信上的网站怎么做的企业网站优化案例
  • 建立网站需要多少钱网站建设的要点是什么
  • 网站建设服务器技术有哪些西部中大建设集团网站
  • 网站建设课本wordpress 虾米音乐播放器
  • 网站三合一杭州富阳区网站建设公司
  • 浙江住房和建设网站首页网站建设方案 流程
  • 网站推广的表现方式网站登录流程图
  • 石家庄网站制作网站建设论证方案
  • 上海做网站公司html5单页网站
  • 企业网站建设 建立作用全网营销渠道
  • c网站开发wordpress分页阅读
  • 成全免费观看在线看seo快速排名源码
  • 美容美发网站模板本地东莞网站建设
  • 永久免费的网站地址建设公司网站的申请
  • 杭州cms建站模板怎么封闭网站
  • 旅游公司电子商务网站建设策划书建筑工程网络计划技术与应用