내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

Object.ReferenceEquals 메서드

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

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

public static bool ReferenceEquals(
	Object objA,
	Object objB
)

매개 변수

objA
형식: System.Object
비교할 첫 번째 개체입니다.
objB
형식: System.Object
비교할 두 번째 개체입니다.

반환 값

형식: System.Boolean
objAobjB의 인스턴스가 같거나 둘 모두 null 참조인 경우에는 true이고 그렇지 않으면 false입니다.

Equals 메서드 및 같음 연산자와 달리 ReferenceEquals 메서드는 재정의할 수 없습니다. 이러한 이유 때문에, 일치에 대한 두 개체 참조를 시험하고 싶은 경우와 Equals 메서드의 구현에 대해 확신하고 싶은 경우, ReferenceEquals 메서드를 호출할 수 있습니다.

그러나 ReferenceEquals 메서드의 반환값은 이러한 두 가지 상황에서 비정상적인 것으로 나타날 수 있습니다.

  • 값 형식을 비교하는 경우입니다. 만약 objAobjB 가 값 형식인 경우, 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
    
    
    
  • 문자열을 비교하는 경우입니다. 만일 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("s1 = s2: {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
    //       s1 = s2: 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

*/


.NET Framework

4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

이식 가능한 클래스 라이브러리

이식 가능한 클래스 라이브러리에서 지원

Windows 스토어 앱용 .NET

Windows 8에서 지원

Windows Phone 앱용 .NET

Windows Phone 8, Silverlight 8.1에서 지원

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft