Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Metodo Object.ReferenceEquals

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

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

public static bool ReferenceEquals(
	Object objA,
	Object objB
)

Parametri

objA
Tipo: System.Object
Primo oggetto da confrontare.
objB
Tipo: System.Object
Secondo oggetto da confrontare.

Valore restituito

Tipo: System.Boolean
true se objA è la stessa istanza di objB oppure se entrambe sono null; in caso contrario, false.

Diversamente dal metodo Equals e dall'operatore di uguaglianza, il metodo ReferenceEquals non può eseguire l'override. A causa di questo, se si desidera verificare l'uguaglianza di due riferimenti all'oggetto e non si è certi dell'implementazione del metodo Equals, è possibile chiamare il metodo ReferenceEquals.

Tuttavia, il valore restituito del metodo ReferenceEquals può risultare anomalo in questi due scenari:

  • Quando si confrontano tipi di valore. Se objA e objB sono tipi di valore, ne viene eseguito il boxing prima di essere passati al metodo ReferenceEquals. Ciò significa che se sia objA che objB rappresentano la stessa istanza di un tipo di valore, il metodo ReferenceEquals tuttavia restituisce false, come illustrato nell'esempio seguente.

    
    using System;
    
    public class Example
    {
       public static void Main()
       {
          int int1 = 3;
          Console.WriteLine(Object.ReferenceEquals(int1, int1));
          Console.WriteLine(int1.GetType().IsValueType);
       }
    }
    // The example displays the following output:
    //       False
    //       True
    
    
    
  • Quando si esegue un confronto tra stringhe. Se objA e objB sono stringhe, il metodo ReferenceEquals restituisce true se la stringa è internata. Non esegue un test di uguaglianza di valori. Nell'esempio seguente, s1 e s2 sono uguali perché sono due istanze di una singola stringa internata. Tuttavia, s3 e s4 non sono uguali, perché sebbene siano presenti valori stringa identica, la stringa non è internata.

    
    using System;
    
    public class Example
    {
       public static void Main()
       {
          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("s1 = s2: {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
    //       s1 = s2: False
    //       StringA interned: No
    
    
    

    Per ulteriori informazioni sull'inserimento di stringa, vedere String.IsInterned.

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


using System;

class MyClass {

   static void Main() {
      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

*/


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft