Leer en inglés

Compartir a través de


Object.ReferenceEquals(Object, Object) Método

Definición

Determina si las instancias de Object especificadas son la misma instancia.

C#
public static bool ReferenceEquals(object objA, object objB);
C#
public static bool ReferenceEquals(object? objA, object? objB);

Parámetros

objA
Object

Primer objeto que se va a comparar.

objB
Object

Segundo objeto que se va a comparar.

Devoluciones

Es true si objA es la misma instancia que objB, o si ambos son null; en caso contrario, es false.

Ejemplos

En el ejemplo siguiente se usa ReferenceEquals para determinar si dos objetos son la misma instancia.

C#
object o = null;
object p = null;
object q = new Object();

Console.WriteLine(Object.ReferenceEquals(o, p));
p = q;
Console.WriteLine(Object.ReferenceEquals(p, q));
Console.WriteLine(Object.ReferenceEquals(o, p));

// This code produces the following output:
//   True
//   True
//   False

Comentarios

A diferencia del Equals método y el operador de igualdad, el ReferenceEquals método no se puede invalidar. Por este motivo, si desea probar dos referencias de objeto para comprobar la igualdad y no está seguro acerca de la implementación del Equals método , puede llamar al ReferenceEquals método .

Sin embargo, el valor devuelto del ReferenceEquals método puede parecer anómalo en estos dos escenarios:

  • Al comparar tipos de valor. Si objA y objB son tipos de valor, se colocan en la conversión boxing antes de pasarlos al ReferenceEquals método . Esto significa que si y objAobjB representan la misma instancia de un tipo de valor, el ReferenceEquals método devuelve falsesin embargo , como se muestra en el ejemplo siguiente.

    C#
    int int1 = 3;
    Console.WriteLine(Object.ReferenceEquals(int1, int1));
    Console.WriteLine(int1.GetType().IsValueType);
    
    // The example displays the following output:
    //       False
    //       True
    

    Para obtener información sobre los tipos de valor de conversión boxing, vea Boxing y Unboxing.

  • Al comparar cadenas. Si objA y objB son cadenas, el ReferenceEquals método devuelve true si la cadena está internada. No realiza una prueba de igualdad de valores. En el ejemplo siguiente, s1 y s2 son iguales porque son dos instancias de una sola cadena internada. Sin embargo, s3 y s4 no son iguales, porque aunque tienen valores de cadena idénticos, esa cadena no está internada.

    C#
    String s1 = "String1";
    String s2 = "String1";
    Console.WriteLine("s1 = s2: {0}", Object.ReferenceEquals(s1, s2));
    Console.WriteLine("{0} interned: {1}", s1,
                      String.IsNullOrEmpty(String.IsInterned(s1)) ? "No" : "Yes");
    
    String suffix = "A";
    String s3 = "String" + suffix;
    String s4 = "String" + suffix;
    Console.WriteLine("s3 = s4: {0}", Object.ReferenceEquals(s3, s4));
    Console.WriteLine("{0} interned: {1}", s3,
                      String.IsNullOrEmpty(String.IsInterned(s3)) ? "No" : "Yes");
    
    // The example displays the following output:
    //       s1 = s2: True
    //       String1 interned: Yes
    //       s3 = s4: False
    //       StringA interned: No
    

    Para obtener más información sobre el internamiento de cadenas, vea String.IsInterned.

Se aplica a

Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Consulte también