Lire en anglais

Partager via


Object.ReferenceEquals(Object, Object) Méthode

Définition

Détermine si les instances de Object spécifiées sont identiques.

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

Paramètres

objA
Object

Premier objet à comparer.

objB
Object

Deuxième objet à comparer.

Retours

Boolean

true si objA est la même instance que objB ou si les deux ont la valeur null ; sinon, false.

Exemples

L’exemple suivant utilise ReferenceEquals pour déterminer si deux objets sont la même instance.

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

Remarques

Contrairement à la Equals méthode et à l’opérateur d’égalité, la ReferenceEquals méthode ne peut pas être substituée. Pour cette raison, si vous souhaitez tester deux références d’objet pour l’égalité et que vous n’êtes pas sûr de l’implémentation de la Equals méthode, vous pouvez appeler la ReferenceEquals méthode.

Toutefois, la valeur de retour de la ReferenceEquals méthode peut sembler anormale dans ces deux scénarios :

  • Lors de la comparaison des types valeur. Si objA et objB sont des types valeur, ils sont boxés avant qu’ils ne soient passés à la ReferenceEquals méthode. Cela signifie que si les deux objA instances et objB représentent la même instance d’un type valeur, la ReferenceEquals méthode retourne falsenéanmoins , comme l’illustre l’exemple suivant.

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

    Pour plus d’informations sur les types de valeurs boxing, consultez Boxing et Unboxing.

  • Lors de la comparaison de chaînes. Si objA et objB sont des chaînes, la ReferenceEquals méthode retourne true si la chaîne est interne. Il n’effectue pas de test pour l’égalité des valeurs. Dans l’exemple suivant, s1 et s2 sont égaux, car il s’agit de deux instances d’une seule chaîne interne. Toutefois, s3 et s4 ne sont pas égaux, car bien qu’elles aient des valeurs de chaîne identiques, cette chaîne n’est pas interne.

    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
    

    Pour plus d’informations sur l’interne de chaînes, consultez String.IsInterned.

S’applique à

Produit Versions
.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

Voir aussi