ReferenceEquals 메서드 (Object, Object)
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장
이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

Object.ReferenceEquals 메서드 (Object, Object)

 

지정한 Object 인스턴스가 동일한지 여부를 확인합니다.

네임스페이스:   System
어셈블리:  mscorlib.dll의 mscorlib

public static bool ReferenceEquals(
	object objA,
	object objB
)

매개 변수

objA
Type: System.Object

비교할 첫 번째 개체입니다.

objB
Type: System.Object

비교할 두 번째 개체입니다.

반환 값

Type: System.Boolean

objAobjB의 인스턴스가 같거나 둘 다 null인 경우 true이고 그렇지 않으면 false입니다.

와 달리는 Equals 메서드 및 같음 연산자는 ReferenceEquals 메서드를 재정의할 수 없습니다. 이 때문에 테스트 하려는 경우 두 개체가 같은지 여부에 대 한 참조 및 구현에 대해 모를 Equals 메서드를 호출할 수 있습니다는 ReferenceEquals 메서드.

그러나의 반환 값은 ReferenceEquals 메서드는 이러한 두 시나리오에서 비정상으로 나타날 수 있습니다.

  • 값 형식을 비교 합니다. 경우 objAobjB 는 값 형식이 boxed에 전달 하기 전에 ReferenceEquals 메서드. 즉, 두 objAobjB 값 형식의 같은 인스턴스를 나타낼는 ReferenceEquals 메서드 그럼에도 불구 하 고 반환 false, 다음 예제와 같이 합니다.

    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
    

    Boxing 값 형식에 대 한 자세한 내용은 Boxing 및 Unboxing(C# 프로그래밍 가이드)합니다.

  • 문자열 비교 합니다. 경우 objAobjB 은 문자열이 ReferenceEquals 메서드가 반환한 true 문자열 내부 풀에 추가 하는 경우. 값이 같은지 테스트를 수행 하지 않습니다. 다음 예에서 s1s2 단일 풀된 문자열의 두 인스턴스가 있기 때문에 동일 합니다. 그러나 s3s4 같지 않은 것을 동일한 문자열 값을가 없지만 해당 문자열은 하지 내부 풀에 추가 하기 때문에 있습니다.

    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
    

    문자열 인터닝에 대 한 자세한 내용은 참조 String.IsInterned합니다.

다음 예제에서는 ReferenceEquals 두 개체가 같은 인스턴스 되는지 확인할 수 있습니다.

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

*/

Universal Windows Platform
8 이후에 사용 가능
.NET Framework
1.1 이후에 사용 가능
Portable Class Library
portable .NET platforms에서 지원 portable .NET platforms
Silverlight
2.0 이후에 사용 가능
Windows Phone Silverlight
7.0 이후에 사용 가능
Windows Phone
8.1 이후에 사용 가능
맨 위로 이동
표시:
© 2016 Microsoft