Object.ReferenceEquals(Object, Object) Metodo

Definizione

Determina se le istanze di Object specificate rappresentano la stessa istanza.

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

Parametri

objA
Object

Primo oggetto da confrontare.

objB
Object

Secondo oggetto da confrontare.

Restituisce

Boolean

true se objA è la stessa istanza di objB oppure se entrambe sono Null; in caso contrario, false.

Esempio

Nell'esempio seguente viene utilizzato ReferenceEquals per determinare se due oggetti sono la stessa istanza.

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

Commenti

A differenza del Equals metodo e dell'operatore di uguaglianza, il ReferenceEquals metodo non può essere sottoposto a override. Per questo motivo, se si desidera testare due riferimenti a oggetti per verificarne l'uguaglianza e non si è certi dell'implementazione del Equals metodo , è possibile chiamare il ReferenceEquals metodo .

Tuttavia, il valore restituito del ReferenceEquals metodo potrebbe sembrare anomalo in questi due scenari:

  • Durante il confronto dei tipi di valore. Se objA e objB sono tipi valore, vengono boxed prima che vengano passati al ReferenceEquals metodo . Ciò significa che se entrambi objA e objB rappresentano la stessa istanza di un tipo valore, il ReferenceEquals metodo restituisce falsetuttavia , come illustrato nell'esempio seguente.

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

    Per informazioni sui tipi di valore boxing, vedere Boxing e Unboxing.

  • Durante il confronto delle stringhe. Se objA e objB sono stringhe, il ReferenceEquals metodo restituisce true se la stringa viene internata. Non esegue un test per verificare l'uguaglianza dei valori. Nell'esempio s1 seguente e s2 sono uguali perché sono due istanze di una singola stringa internata. Tuttavia, s3 e s4 non sono uguali, perché anche se hanno valori stringa identici, tale stringa non viene internata.

    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
    

    Per altre informazioni sull'interno delle stringhe, vedere String.IsInterned.

Si applica a

Prodotto Versioni
.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
.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
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Vedi anche