Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original
Este tema aún no ha recibido ninguna valoración - Valorar este tema

Object.Equals (Método) (Object)

Determina si el objeto especificado es igual al objeto actual.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)
abstract Equals : 
        obj:Object -> bool 
override Equals : 
        obj:Object -> bool 

Parámetros

obj
Tipo: System.Object
Objeto que se va a comparar con el objeto actual.

Valor devuelto

Tipo: System.Boolean
true si el objeto especificado es igual al objeto actual; de lo contrario, false.

El tipo de comparación entre la instancia actual y el parámetro obj depende de si la instancia actual es un tipo de referencia o un tipo de valor. Si la instancia actual es un tipo de referencia, el método Equals(Object) prueba de igualdad de referencia, y una llamada al método Equals(Object) equivale a una llamada al método ReferenceEquals . La igualdad de referencias significa que las variables de objeto se comparan que hacen referencia al mismo objeto. El ejemplo siguiente se muestra el resultado de la comparación. Define una clase Person , que es un tipo de referencia, y llama al constructor de clase Person para crear instancias de dos objetos nuevos, person1a y person2de Person , que tienen el mismo valor. También asigna person1a a otra variable de objeto, person1b. Como muestra el resultado del ejemplo, person1a y person1b son iguales porque hacen referencia al mismo objeto. Sin embargo, person1a y person2 no son iguales, aunque tienen el mismo valor.

No hay ningún ejemplo de código disponible o este idioma no es compatible.

Si la instancia actual es un tipo de valor, el método Equals(Object) pruebas de igualdad de valores. La igualdad de valores significa lo siguiente:

  • Los dos objetos son del mismo tipo. Como se muestra en el ejemplo siguiente, un objeto Byte que tiene un valor de 12 no es un objeto Int32 que tiene un valor de 12, porque los dos objetos tienen distintos tipos en tiempo de ejecución.

    No hay ningún ejemplo de código disponible o este idioma no es compatible.
  • Los valores de los campos públicos y privados de los dos objetos son iguales. Las pruebas siguientes de ejemplo para la igualdad de valores. Define una estructura Person , que es un tipo de valor, y llama al constructor de clase Person para crear instancias de dos objetos nuevos, person1 y person2de Person , que tienen el mismo valor. Como el resultado del ejemplo, aunque las dos variables de objeto hacen referencia a distintos objetos, person1 y person2 son iguales porque tienen el mismo valor para el campo privado personName .

    No hay ningún ejemplo de código disponible o este idioma no es compatible.

Dado que la clase Object es la clase base para todos los tipos de .NET Framework, el método Object.Equals(Object) proporciona la comparación predeterminada de igualdad para todos los demás tipos. Sin embargo, los tipos reemplazan a menudo el método Equals para implementar la igualdad de valores. Para obtener más información, vea las notas de los llamadores y notas para las secciones de los herederos.

Notas para los llamadores

Las clases derivadas con frecuencia reemplazan el método Object.Equals(Object) para implementar la igualdad de valores. Además, los tipos también con frecuencia proporcionan una sobrecarga fuertemente tipada adicional al método Equals . Cuando se llama al método Equals para comprobar la igualdad, debe conocer si la instancia actual invalida Object.Equals y entender cómo una llamada concreta a un método Equals se resuelve. Si no, puede realizar una prueba de igualdad que es diferente del concretas, y el método puede devolver un valor inesperado.

Esto se muestra en el ejemplo siguiente. Crea una instancia de tres objetos StringBuilder con cadenas idénticas y, a continuación cuatro llamadas a métodos Equals . Que quedan la primera llamada al método devuelve true, y tres falsereturn.

No hay ningún ejemplo de código disponible o este idioma no es compatible.

En el primer caso, se llama a la sobrecarga fuertemente tipada del método StringBuilder.Equals(StringBuilder) , para comprobar la igualdad de valores. Dado que las cadenas asignadas a los dos objetos StringBuilder son iguales, el método devuelve true. Sin embargo, StringBuilder no reemplaza Object.Equals(Object). Por ello, cuando el objeto StringBuilder se convierte a Object, cuando una instancia StringBuilder se asigna a una variable Objectescrito y, cuando el método Object.Equals(Object, Object) se pasa dos objetos StringBuilder , el método Object.Equals(Object) predeterminado se denomina. Dado que StringBuilder es un tipo de referencia, es equivalente a pasar los dos objetos StringBuilder al método ReferenceEquals . Aunque los tres objetos StringBuilder contienen cadenas idénticas, hacen referencia a tres objetos distintos. Como resultado, estas tres llamadas a métodos devuelven false.

Puede comparar el objeto actual con otro objeto para la igualdad de la referencia llamando al método ReferenceEquals. En Visual Basic, puede utilizar la palabra clave (por ejemplo, If Me Is otherObject Then ...) is también.

Notas a herederos.

Cuando se define el propio tipo, ese tipo hereda la funcionalidad definida por el método Equals de su tipo base. La tabla siguiente muestra la implementación predeterminada del método Equals para las categorías principales de tipos de .NET Framework.

Categoría de tipo

Igualdad definida por

Comentarios

Clase derivada directamente Object

Object.Equals(Object)

Igualdad de referencia; equivalente a Object.ReferenceEquals.

Estructura

ValueType.Equals

Igualdad de valor; comparación directa de byte-por- byte o comparación de campo-por- campo mediante la reflexión.

Enumeración

Enum.Equals

Los valores deben tener el mismo tipo de enumeración y el mismo valor subyacente.

Delegado

MulticastDelegate.Equals

Los delegados deben tener el mismo tipo con listas de invocación idénticas.

Interfaz

Object.Equals(Object)

Igualdad de referencia.

También puede invalidar la implementación predeterminada Equals para comprobar la igualdad de valores en lugar de igualdad de referencia y definir el significado exacto de igualdad de valores. Tales implementaciones de retorno trueEquals si los dos objetos tienen el mismo valor, aunque no son la misma instancia. El implementador de tipo decide qué constituye el valor de un objeto, pero suele ser varios o todos los datos almacenados en las variables de instancia del objeto. Por ejemplo, el valor de un objeto String se basa en los caracteres de la cadena; el método String.Equals(Object) invalida el método Object.Equals(Object) para devolver true para cualquier dos instancias de la cadena que contiene los mismos caracteres en el mismo orden.

El ejemplo siguiente muestra cómo invalidar el método Object.Equals(Object) para comprobar la igualdad de valores. Invalida el método Equals para la clase Person . Si Person aceptara la implementación de la clase base de igualdad, dos objetos Person se iguales sólo si se hizo referencia a un único objeto. Sin embargo, en este caso, dos objetos Person son iguales si tienen el mismo valor para la propiedad Person.Id .

No hay ningún ejemplo de código disponible o este idioma no es compatible.

Las instrucciones siguientes deben ser true para todas las implementaciones del método Equals(Object). En la lista, x, y, y z representan las referencias a objetos que no son null.

  • x.Equals(x) devuelve true, excepto en los casos que implican tipos de punto flotante. Vea el 60559:2011 de ISO/IEC/IEEE, TI -- Sistemas de microprocesador -- Aritmética flotante.

  • x.Equals(y) devuelve el mismo valor que y.Equals(x).

  • x.Equals(y) devuelve true si x y y son NaN.

  • Si (x.Equals(y) && y.Equals(z)) devuelve true, después x.Equals(z) devuelve true.

  • Las llamadas sucesivas a x.Equals(y) devuelven el mismo valor siempre que los objetos a los que hace referencia x y y no se modifiquen.

  • x.Equals(null) devuelve false.

Las implementaciones de Equals no deben producir excepciones.

Siga estas instrucciones al reemplazar Equals(Object):

  • Los tipos que implementan IComparable deben reemplazar el método Equals(Object).

  • Los tipos que reemplazan Equals(Object) también deben reemplazar GetHashCode; si no, las tablas hash podrían no funcionar correctamente.

  • Si el lenguaje de programación admite la sobrecarga de operadores y se sobrecarga el operador de igualdad para un tipo determinado, también debe reemplazar el método Equals(Object) devuelva el mismo resultado que el operador de igualdad. Esto ayuda a garantizar que el código de biblioteca de clases que utilice Equals (como ArrayList y Hashtable) se comporta de forma coherente con la manera en que el código de aplicación usa el operador de igualdad.

bsc2ak47.collapse_all(es-es,VS.110).gifInstrucciones para los tipos de referencia

Las instrucciones siguientes se aplican a reemplazar Equals(Object) un tipo de referencia:

  • Considere reemplazar Equals si la semántica de tipos se basa en el hecho de que el tipo representa algunos valores.

  • La mayoría de los tipos de referencia no deben sobrecargar el operador de igualdad, aunque reemplacen el método Equals. No obstante, cuando se implemente un tipo de referencia destinado a tener semántica de valor, como un tipo de número complejo, debe reemplazarse el operador de igualdad.

bsc2ak47.collapse_all(es-es,VS.110).gifInstrucciones para los tipos de valor

Las instrucciones siguientes se aplican a reemplazar Equals(Object) un tipo de valor:

  • Si define un tipo de valor que incluya uno o más campos cuyos valores son tipos de referencia, debe invalidar Equals(Object). La implementación Equals(Object) proporcionada por ValueType realiza una comparación de byte-por- bytes para los tipos de valor cuyos campos son todos los tipos de valor, pero utiliza la reflexión para realizar una comparación de campo-por- campo de los tipos de valor cuyos campos incluyen los tipos de referencia.

  • Si reemplaza Equals y el lenguaje de desarrollo admite la sobrecarga de operadores, debe sobrecargar el operador de igualdad.

El ejemplo siguiente se muestra una clase Point que invalide el método Equals para proporcionar igualdad de valor, y una clase Point3D que se deriva Point. Dado que Point reemplaza Object.Equals(Object) para comprobar la igualdad de valor, el método Object.Equals(Object) no se denomina. Sin embargo, Point3D.Equals llama Point.Equals porque Point implementa Object.Equals(Object) de una forma que proporciona la igualdad de valores.

No hay ningún ejemplo de código disponible o este idioma no es compatible.

Comprueba si el método Point.Equals para asegurarse de que el argumento obj no es null y que haga referencia a una instancia del mismo tipo que este objeto. Si cualquiera de los errores activados, el método devuelve false.

Las llamadas al método Point.Equals el método GetType para determinar si los tipos en tiempo de ejecución de los dos objetos son idénticos. Si el método utilizado una comprobación del formulario obj is Point en C# o TryCast(obj, Point) en Visual Basic, la comprobación devolvería true en caso de que obj es una instancia de una clase derivada Point, aunque obj y la instancia actual no son del mismo tipo en tiempo de ejecución. Una vez que se haya comprobado que ambos objetos son del mismo tipo, el método convierte obj en el tipo Point y devuelve el resultado de comparar las variables de instancia de los dos objetos.

En Point3D.Equals, se invoca el método heredado Point.Equals , que reemplaza Object.Equals(Object), antes de que se haga nada más. Las comprobaciones heredadas del método Point.Equals para asegurarse de que obj no es null, que obj es una instancia de la misma clase que este objeto, y que las variables de instancia heredadas. Cuando el método heredado Point.Equals vuelve true hace que el método compara las variables de instancia introducidas en la clase derivada. Concretamente, la conversión en Point3D no se ejecuta salvo que se haya determinado que obj sea de tipo Point3D o una clase derivada de Point3D.

El ejemplo siguiente se define una clase Rectangle que internamente implemente un rectángulo como dos objetos Point . La clase Rectangle también invalida Object.Equals(Object) para ofrecer igualdad de valor.

No hay ningún ejemplo de código disponible o este idioma no es compatible.

Algunos lenguajes como sobrecarga de operadores admiten de C# y Visual Basic. Cuando un tipo sobrecarga el operador de igualdad, también debe reemplazar el método Equals(Object) para ofrecer la misma funcionalidad. Esto se consigue normalmente escribiendo el método Equals(Object) en términos del operador de igualdad sobrecargado, como en el siguiente ejemplo de código.

No hay ningún ejemplo de código disponible o este idioma no es compatible.

Dado que Complex es un tipo de valor, no puede derivarse de. Por consiguiente, la invalidación del método Equals(Object) no necesita llamar a GetType para determinar el tipo exacto del runtime de cada objeto, pero puede usar el operador is en C# o el operador TypeOf en Visual Basic para comprobar el tipo de parámetro obj .

.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
¿Te ha resultado útil?
(Caracteres restantes: 1500)

Adiciones de comunidad

AGREGAR
© 2013 Microsoft. Reservados todos los derechos.