Object.ReferenceEquals(Object, Object) Metodo

Definizione

Determina se le istanze di Object specificate rappresentano la stessa istanza.Determines whether the specified Object instances are the same instance.

public:
 static bool ReferenceEquals(System::Object ^ objA, System::Object ^ objB);
public static bool ReferenceEquals (object objA, object objB);
static member ReferenceEquals : obj * obj -> bool
Public Shared Function ReferenceEquals (objA As Object, objB As Object) As Boolean

Parametri

objA
Object

Primo oggetto da confrontare.The first object to compare.

objB
Object

Secondo oggetto da confrontare.The second object to compare.

Restituisce

true se objA è la stessa istanza di objB oppure se entrambe sono null; in caso contrario, false.true if objA is the same instance as objB or if both are null; otherwise, false.

Esempi

Nell'esempio seguente viene ReferenceEquals utilizzato per determinare se due oggetti sono la stessa istanza.The following example uses ReferenceEquals to determine if two objects are the same instance.

using namespace System;
int main()
{
   Object^ o = nullptr;
   Object^ p = nullptr;
   Object^ q = gcnew 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

*/
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
Public Class App
    Public Shared Sub Main() 
        Dim o As Object = Nothing
        Dim p As Object = Nothing
        Dim q As New Object
        Console.WriteLine(Object.ReferenceEquals(o, p))
        p = q
        Console.WriteLine(Object.ReferenceEquals(p, q))
        Console.WriteLine(Object.ReferenceEquals(o, p))
    End Sub 
End Class 
' This code produces the following output:
'
' True
' True
' False
'

Commenti

A differenza del Equals metodo e dell'operatore di uguaglianza, ReferenceEquals non è possibile eseguire l'override del metodo.Unlike the Equals method and the equality operator, the ReferenceEquals method cannot be overridden. Per questo motivo, se si desidera testare due riferimenti a oggetti per verificarne l'uguaglianza e non si è certi dell'implementazione Equals del metodo, è possibile chiamare ReferenceEquals il metodo.Because of this, if you want to test two object references for equality and you are unsure about the implementation of the Equals method, you can call the ReferenceEquals method.

Tuttavia, il valore restituito del ReferenceEquals metodo può sembrare anomalo in questi due scenari:However, the return value of the ReferenceEquals method may appear to be anomalous in these two scenarios:

  • Quando si confrontano i tipi di valore.When comparing value types. Se objA ReferenceEquals e objB sono tipi di valore, vengono boxed prima che vengano passati al metodo.If objA and objB are value types, they are boxed before they are passed to the ReferenceEquals method. Ciò significa che objA se e objB rappresentano la stessa istanza di un tipo di valore, il ReferenceEquals metodo restituisce falsecomunque, come illustrato nell'esempio seguente.This means that if both objA and objB represent the same instance of a value type, the ReferenceEquals method nevertheless returns false, as the following example shows.

    int int1 = 3;
    Console.WriteLine(Object.ReferenceEquals(int1, int1));
    Console.WriteLine(int1.GetType().IsValueType);
    
    // The example displays the following output:
    //       False
    //       True
    
    Public Module Example
       Public Sub Main
          Dim int1 As Integer = 3
          Console.WriteLine(Object.ReferenceEquals(int1, int1))
          Console.WriteLine(int1.GetType().IsValueType)
       End Sub
    End Module
    ' The example displays the following output:
    '       False
    '       True
    

    Per informazioni sui tipi di valore Boxing, vedere Boxing eunboxing.For information on boxing value types, see Boxing and Unboxing.

  • Quando si confrontano le stringhe.When comparing strings. Se objA ReferenceEquals true e objB sono stringhe, il metodo restituisce se la stringa è interna.If objA and objB are strings, the ReferenceEquals method returns true if the string is interned. Non esegue un test per verificare l'uguaglianza dei valori.It does not perform a test for value equality. Nell'esempio seguente, s1 e s2 sono uguali perché si tratta di due istanze di una singola stringa interna.In the following example, s1 and s2 are equal because they are two instances of a single interned string. Tuttavia, s3 e s4 non sono uguali, perché anche se hanno valori stringa identici, tale stringa non è interna.However, s3 and s4 are not equal, because although they are have identical string values, that string is not interned.

    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
    
    Module Example
       Public Sub Main()
          Dim s1 As String = "String1"
          Dim s2 As String = "String1"
          Console.WriteLine("s1 = s2: {0}", Object.ReferenceEquals(s1, s2))
          Console.WriteLine("{0} interned: {1}", s1, 
                            If(String.IsNullOrEmpty(String.IsInterned(s1)), "No", "Yes"))
    
          Dim suffix As String = "A"
          Dim s3 = "String" + suffix
          Dim s4 = "String" + suffix
          Console.WriteLine("s3 = s4: {0}", Object.ReferenceEquals(s3, s4))
          Console.WriteLine("{0} interned: {1}", s3, 
                            If(String.IsNullOrEmpty(String.IsInterned(s3)), "No", "Yes"))
       End Sub
    End Module
    ' The example displays the following output:
    '       s1 = s2: True
    '       String1 interned: Yes
    '       s3 = s4: False
    '       StringA interned: No
    

    Per ulteriori informazioni sulla centralizzazione delle stringhe, String.IsInternedvedere.For more information about string interning, see String.IsInterned.

Si applica a

Vedi anche