Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Object.ReferenceEquals méthode (Object, Object)

 

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

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public static bool ReferenceEquals(
	object objA,
	object objB
)

Paramètres

objA
Type: System.Object

Premier objet à comparer.

objB
Type: System.Object

Deuxième objet à comparer.

Valeur de retour

Type: System.Boolean

trueSi objA est la même instance que objB ou si les deux sont null; sinon, false.

Contrairement à la Equals méthode et l’opérateur d’égalité, le ReferenceEquals méthode ne peut pas être substituée. Pour cette raison, si vous souhaitez tester deux références à l’égalité des objets et vous ne savez pas sur 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 apparaître comme étant anormaux dans ces deux scénarios :

  • Lors de la comparaison des types valeur. Si objA et objB sont des types valeur, ils sont convertis avant d’être passés à la ReferenceEquals (méthode). Cela signifie que si les deux objA et objB représentent la même instance d’un type valeur, le ReferenceEquals méthode néanmoins retourne false, comme le montre l’exemple suivant.

    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
    

    Pour plus d’informations sur les types valeur boxing, consultez Boxing et unboxing (Guide de programmation C#).

  • Lors de la comparaison de chaînes. Si objA et objB sont des chaînes, la ReferenceEquals retourne de la méthode true si la chaîne est dans le pool interne. Il n’effectue pas un test de l’égalité des valeurs. Dans l’exemple suivant, s1 et s2 sont égales, car elles sont deux instances d’une chaîne dans le pool interne unique. Toutefois, s3 et s4 ne sont pas égales, car même si elles sont ont des valeurs de chaîne identique, cette chaîne n’est pas intégrée.

    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
    

    Pour plus d’informations sur la centralisation des chaînes, consultez String.IsInterned.

L’exemple suivant utilise ReferenceEquals pour déterminer si deux objets sont identiques.

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

*/

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: