C#中:如何静态的Object.Equals检查的平等?

假设你有两个不同的类,其中每个人都有自己实施的Equals; 哪一个是使用呢? 如果只有其中一人有一个? 或者他们没有? 是否有任何以下行的相同呢?

object .Equals( first, second ) first .Equals( second ) second .Equals( first )

我猜测,前两者可能是等价的,但我真的没有线索。

这是什么真的?

--------------解决方案-------------

基本上,它做了三件事:

  • 检查引用相等(如果是的话返回true)
  • 检查参考无效(返回false,如果任一值为null;现在空== NULL案件已处理)
  • 检查是否与值相等first.Equals(second)

排序并不重要 ,如果这两个值都表现良好平等实现方式中,如平等应当实现为使得x.Equals(y)暗示y.Equals(x) 。 不过,我已经安装了离线文档确实状态first.Equals(二)(或objA.equals(objB)使用真正的参数命名)的规定。 在线文档并没有提到这一点,有趣的是。

只是为了让这一切混凝土,实施看起来是这样的:

public static bool Equals(object x, object y)
{
if (x == y) // Reference equality only; overloaded operators are ignored
{
return true;
}
if (x == null || y == null) // Again, reference checks
{
return false;
}
return x.Equals(y); // Safe as we know x != null.
}

缺省情况下,对象等值通过在存储器中的对象的地址来确定。 如果两个实例具有相同的存储器地址,它们是相等的。

然而,这可以在对象内被重载,以便开发可以比较arn't在同一存储器位置,并仍然被认为是相等的两个对象。 例如,如果你有一个数据访问层,每个对象从数据库中有它的数据记录的ID,你可以有基于ID对象相等比较。

你可以重载运营商产生这种功能。

分类:C# 时间:2012-01-01 人气:0
分享到:

相关文章

  • 如何实现在C#中静态对象的定义部分类 2013-07-18

    //找到了解决办法...问题是事实,我有寄存器填补创建(构造器方法)的数组,该数组没有实例化. 为了使短期的,我太小白,甚至把一个破发点中的构造,看看净处理的第一次机会异常. 再次感谢所有repliers. 你已经真的很有帮助. :)再次对不起,我noobness 有什么我今天了解到: - 你永远不知道.NET将如何合并的局部类-bE更加意识到第一次机会异常 //状态更改2012年1月30日17:00左右,对不起,我缩小了错误的问题. 这里的问题解释似乎没有由设置,因此这个问题不再需要存在的代码

  • Java中,搜索对象的列表内? 2012-07-07

    我是有点失落的方式来实现这一目标最快的. 我有一个有基本的变量属性(与getter / setter方法​​)对象的大名单,我需要做此列表中的搜索,找到匹配给定参数,该列表中的对象 我发现怎么做常规列表搜索,但我需要,例如搜索做一个调用的getName()列表中的每个对象的结果的价值,并得到有我的输入匹配的结果对象. 如下图所示,其中第三个参数是方法调用,第二的结果的东西就是我试图找到. int index = Collections.binarySearch(myList, "value&qu

  • 在JavaScript中静态变量 2012-09-05

    如何创建在Javascript中静态变量? --------------解决方案------------- 如果你来自一个基于类的,强类型的面向对象的语言(如Java,C ++或C#)我假设你正在试图创建关联到一个"型"而不是一个实例变量或方法. 用"经典"的方针,以构造函数的例子也许可以帮助你捕捉的基本面向对象的JavaScript的概念: function MyClass () { // constructor function var privateVaria

  • 等于对象=等于Hashcode方法的后果,JAVA 2012-09-17

    什么是"最坏情况"的后果(这里是现实世界中的场景),如果我有一个对象(即一个bean),其中有一个坚实的,有意义equals()方法,但缺乏互补hashCode()方法? 这似乎是大多数API使用equals()和compareTo()方法来保持集合. 我想知道的是,当hashCode()最重要的? --------------解决方案------------- 最坏情况的后果是,该哈希表将无法工作. 例如,让我们假设你有一个简单的类是这样的: public class StringW

  • C ++静态全局对象的解决方法? 2012-11-10

    我有一个C ++程序崩溃的原因的错误. 它甚至不会得到主要为NULL指针是在其静态全局对象的构造器功能中的一个访问. 更糟糕的是指针是否为NULL,但应已设置另一个全局静态变量. 我想我可以包装在一个函数设置全局指针对象的全局. 我知道这需要重新设计全局出来. 我也知道,全局静态对象的顺序是未知的. 我仍然curious-- 是有一个很好的接受的方法来控制静态全局对象初始化的顺序? 简单的例子(拆卸错误检查测井ETC) [game.cpp] Point UpperLeft(-1024.1024)

  • C#中:同一个对象有相同的hashCode? 2012-12-06

    假设我有两个对象叫做K和M if(K.Equals(M)) { } 如果这是真的, K和M 总是具有相同 HashCode ? 或者,它依赖于编程语言? --------------解决方案------------- 对于合同GetHashCode()需要它,但因为任何人都可以提出自己的实施这是从来没有保证. 许多类(特别是哈希表)需要它才能正常运行. 如果要实现一个类时,你应该始终确保两个相等的对象具有相同的哈希码. 如果要实现的实用方法/类,你可以假设两个相等的对象有相同的hashCode(

  • 帮助与理解Java中的函数对象或仿函数 2013-01-19

    有人可以解释一个仿函数是什么,以及提供一个简单的例子吗? --------------解决方案------------- 函数对象就是这样. 东西这既是一个对象和一个函数. 旁白:调用一个函数对象一个"仿"一词的严重滥用:别样的"仿函数"是数学中的核心概念,一个拥有计算机科学的直接作用(见"哈斯克尔函子"). 该术语也用在ML的方式略有不同,所以除非你正在实施的在Java中这些概念(可以!),请立即停止使用这些术语之一. 它使简单的事情复杂化.

  • 你可以在Java中的本地对象锁定? 2013-03-25

    我有这个代码片段 private Templates retrieveFromCache(String name) { TemplatesWrapper t = xlCache.get(name); synchronized(t){ if (!t.isValid()) { xlCache.remove(name); return null; } } return t.getTemplate(); } xlCache是一个ConcurrentHashMap ; 我之所以在同步t的是,2个线程可以交

  • 就是一切功能或在Scala中表达或对象? 2013-06-22

    我很困惑. 我以为一切都表达因为语句返回一个值. 但我也听说,一切都在斯卡拉的对象. 这是什么现实? 没斯卡拉为什么选择这样做的一种方式或其他? 这是什么意思到斯卡拉开发者? --------------解决方案------------- 我以为一切都表达因为语句返回一个值. 有东西不具有值,但在大多数情况下,这是正确的. 这意味着,我们基本上可以滴"声明",并在斯卡拉"表情"之间的区别. 术语"返回值"是不是很恰当,但是. 我们说的一切&quo

  • 静态Conenction对象发行 2013-07-07

    我使用J2EE创建一个Web服务. 这个web服务更是创下DB插入/更新数据. 我们正在使用的连接司机eshtablish连接到数据库. 当我们启动这个Web服务,并对其进行了测试,我们得到了一个内存泄漏问题,因此该交易失败. 该folliwng是我们获得错误信息:"查询处理过程中的内存分配失败" 当我们重新启动的WebLogic Server此问题已得到解决. 这种静态连接对象只使用EJB组件来处理数据库事务. 请问这种单一静态连接对象将创建内存泄漏问题,将导致交易失败? 注:请不要

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.332 (s). 10 q(s)