Object.ReferenceEquals(Object, Object) Object.ReferenceEquals(Object, Object) Object.ReferenceEquals(Object, Object) Object.ReferenceEquals(Object, Object) Method

Définition

Détermine si les instances de Object spécifiées sont identiques.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

Paramètres

objA
Object Object Object Object

Premier objet à comparer.The first object to compare.

objB
Object Object Object Object

Deuxième objet à comparer.The second object to compare.

Retours

true si objA est la même instance que objB ou si les deux ont la valeur null ; sinon, false.true if objA is the same instance as objB or if both are null; otherwise, false.

Exemples

L’exemple suivant utilise ReferenceEquals pour déterminer si deux objets sont la même instance.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

*/
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

*/
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
'

Remarques

Contrairement à Equals la méthode et à l’opérateur d' ReferenceEquals égalité, la méthode ne peut pas être substituée.Unlike the Equals method and the equality operator, the ReferenceEquals method cannot be overridden. Pour cette raison, si vous souhaitez tester l’égalité de deux références d’objet et que vous n’êtes pas sûr de l' Equals implémentation de la méthode, vous ReferenceEquals pouvez appeler la méthode.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.

Toutefois, la valeur de retour de ReferenceEquals la méthode peut sembler anormale dans ces deux scénarios :However, the return value of the ReferenceEquals method may appear to be anomalous in these two scenarios:

  • Lors de la comparaison des types valeur.When comparing value types. Si objA ReferenceEquals et objB sont des types valeur, ils sont boxed avant d’être passés à la méthode.If objA and objB are value types, they are boxed before they are passed to the ReferenceEquals method. Cela signifie que objA si et objB représentent la même instance d’un type valeur, la ReferenceEquals méthode retourne falsenéanmoins, comme le montre l’exemple suivant.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.

    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
    
    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
    

    Pour plus d’informations sur les types valeur de boxing, consultez conversion boxing et unboxing.For information on boxing value types, see Boxing and Unboxing.

  • Lors de la comparaison de chaînes.When comparing strings. Si objA ReferenceEquals true et objB sont des chaînes, la méthode retourne si la chaîne est internée.If objA and objB are strings, the ReferenceEquals method returns true if the string is interned. Il n’effectue pas de test pour l’égalité des valeurs.It does not perform a test for value equality. Dans l’exemple suivant, s1 et s2 sont égaux parce qu’il s’agit de deux instances d’une seule chaîne internée.In the following example, s1 and s2 are equal because they are two instances of a single interned string. Toutefois, s3 et s4 ne sont pas égaux, car même si elles ont des valeurs de chaîne identiques, cette chaîne n’est pas internée.However, s3 and s4 are not equal, because although they are have identical string values, that string is not interned.

    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("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
    

    Pour plus d’informations sur l’internement des String.IsInternedchaînes, consultez.For more information about string interning, see String.IsInterned.

S’applique à

Voir aussi