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

String.GetHashCode 메서드

해당 문자열에 대한 해시 코드를 반환합니다.

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

public override int GetHashCode()

반환 값

형식: System.Int32
32비트 부호 있는 정수 해시 코드입니다.

GetHashCode 의 동작은 공용 언어 런타임 버전마다 변경될 수 있는 구현에 따라 달라집니다. 이런 일이 일어날 수 있는 이유는 GetHashCode의 성능 개선 때문입니다.

중요중요

두 문자열 개체가 동일하면 GetHashCode 메서드가 동일한 값을 반환하지만 각 고유 문자열 값마다 고유 해시 코드 값이 있는 것은 아닙니다. 서로 다른 문자열이 같은 해시 코드를 반환할 수도 있습니다.

해시 코드가 안전하다고 보장할 수 없습니다. 동일한 문자열에 대한 해시 코드는 .NET Framwork의 단일 버전에 대한 플랫폼(32비트와 64비같은)와 .NET Framwork의 버전에 따라 다를 수 있습니다. 경우에 따라, 응용 프로그램 도메인에따라 다를수 있습니다.

따라서, 해시 코드는 생성된 응용 프로그램 도메인 외부에서 사용되어져서는 안되며, 컬렉션에서 키 필드로 사용되지 말아야하고 유지되어서도 안됩니다.

마지막으로, 강력한 해시를 암호화 해야 할 필요가 있을 경우, 암호화 시킨 해시 함수에 의해 반환 되는 값 대신에 해시 코드를 사용하지 마십시오. 암호화 해시에서 System.Security.Cryptography.HashAlgorithm 또는 System.Security.Cryptography.KeyedHashAlgorithm 클래스로부터 도출된 클래스를 사용합니다.

해시 코드에 대한 자세한 내용은 Object.GetHashCode를 참조하십시오.

데스크톱 응용 프로그램에서, 각 응용프로그램 도메인 단위로 유일한 해시 코드를 생성하기 위해 <UseRandomizedStringHashAlgorithm>요소 를 사용할 수 있습니다. 이것은 충돌의 수를 줄일 수 있고 해시테이블을 사용하여 조회하고 전체 성능을 향상시킬 수 있습니다. 다음 예제에서는 <UseRandomizedStringHashAlgorithm>요소 를 사용하는 방법을 보여줍니다. 이것은 그 값이 "This is a string"인 private 문자열 상수 s가 포함된 DisplayString 클래스를 정의합니다. 메서드를 실행하는 응용 프로그램 도메인의 이름과 함께 문자열 값 및 해시 코드를 표시하는 ShowStringHashCode 메서드도 포함합니다.


using System;

public class Example
{
   public static void Main()
   {
      // Show hash code in current domain.
      DisplayString display = new DisplayString();
      display.ShowStringHashCode();

      // Create a new app domain and show string hash code.
      AppDomain domain = AppDomain.CreateDomain("NewDomain");
      var display2 = (DisplayString) domain.CreateInstanceAndUnwrap(typeof(Example).Assembly.FullName, 
                                                          "DisplayString");   
      display2.ShowStringHashCode();
   }
}

public class DisplayString : MarshalByRefObject
{
   private String s = "This is a string.";

   public override bool Equals(Object obj)
   {
      String s2 = obj as String; 
      if (s2 == null)
         return false;
      else
         return s == s2; 
   }

   public bool Equals(String str)
   {
      return s == str;
   }    

   public override int GetHashCode()
   {
      return s.GetHashCode();
   }

   public override String ToString() 
   {
      return s;
   }

   public void ShowStringHashCode()
   {
      Console.WriteLine("String '{0}' in domain '{1}': {2:X8}",
                        s, AppDomain.CurrentDomain.FriendlyName, 
                        s.GetHashCode());
   }
}


구성 파일을 지정하지 않고 이 예제를 실행할 경우 다음과 유사한 출력이 표시됩니다. 문자열의 해시 코드는 두 응용 프로그램 도메인에서 동일합니다.


String 'This is a string.' in domain 'PerDomain.exe': 941BCEAC
String 'This is a string.' in domain 'NewDomain': 941BCEAC

하지만 샘플 디렉터리에 다음의 구성을 추가하고 샘플을 실행하는 경우 동일 문자열의 해시 코드는 응용 프로그램 도메인에 의해 달라집니다.


<?xml version ="1.0"?>
<configuration>
   <runtime>
      <UseRandomizedStringHashAlgorithm enabled="1" />
   </runtime>
</configuration>

구성 파일이 있는 경우 예제는 다음과 같은 출력을 표시합니다.


String 'This is a string.' in domain 'PerDomain.exe': 5435776D
String 'This is a string.' in domain 'NewDomain': 75CC8236

중요중요

해시 코드는 효과적으로 해시 테이블로부터 키로 지정된 개체를 검색하고 삽입하는데 사용됩니다. 그러나, 해시코드는 문자열을 유일하게 식별하지 않습니다. 동일한 문자열들은 동일한 해시코드를 갖지만, 공용 언어 런타임은 다른 문자열에 대한 동일한 해시코드를 할당할 수도 있습니다. 또한, 해시코드는 .NET Framework 버전, 단일 버전에서 플랫폼과 응용 프로그램 도메인에 따라 달라질 수 있습니다. 이것에 따라, 직렬화하지 않거나 해시 코드 값을 유지해야 하거나, 사전 또는 해시 테이블에서 키로 사용합니다.

해시코드를 사용하는 방법과 GetHashCode 메서드를 사용하기위한 자세한 내용은 Object.GetHashCode 를 참조하세요.

호출자 참고 사항

GetHashCode 에 의해 반환되는 값은 플랫폼에 따라 다릅니다. .NET Framework의 32비트 및 64비트 버전에서 차이가 있습니다. 이것은 .NET Framework의 버전마다 다를 수 있습니다.

주의 정보주의

해시 코드는 효율적인 삽입 및 해시 테이블을 기반으로 하는 컬렉션에서 조회를 위한 것입니다. 해시 코드는 고정 값이 아닙니다. 이러한 이유로:

  • 해시 코드 값을 연재하지 않거나 또는 데이터베이스에 저장하지 마십시오.

  • 주된 컬렉션에서 개체를 검색하는 키로 해시 코드를 사용하지 마십시오.

  • 암호화 해시함수에 의해 반환 되는 값 대신 해시코드를 사용하지 마십시오. 암호화 해시에서 System.Security.Cryptography.HashAlgorithm 또는 System.Security.Cryptography.KeyedHashAlgorithm 클래스로부터 도출된 클래스를 사용합니다.

  • 두 개체가 같은지를 확인하기 위하여 해시 코드의 일치 여부를 테스트하지 않습니다. (다른 개체에 동일한 해시 코드를 가질 수 있습니다.) 같음 여부를 테스트 하려면 해당 ReferenceEquals 또는 Equals 메서드를 호출합니다.

다음 예제에서는 다양한 입력 문자열을 사용하여 GetHashCode 메서드를 보여 줍니다.


using System;

class GetHashCode 
{
    public static void Main() 
    {
        DisplayHashCode( "" );
        DisplayHashCode( "a" );
        DisplayHashCode( "ab" );
        DisplayHashCode( "abc" );
        DisplayHashCode( "abd" );
        DisplayHashCode( "abe" );
        DisplayHashCode( "abcdef" );
        DisplayHashCode( "abcdeg" );
        DisplayHashCode( "abcdeh" );
        DisplayHashCode( "abcdei" );
        DisplayHashCode( "Abcdeg" );
        DisplayHashCode( "Abcdeh" );
        DisplayHashCode( "Abcdei" );
    }

    static void DisplayHashCode( String Operand )
    {
        int     HashCode = Operand.GetHashCode( );
        Console.WriteLine("The hash code for \"{0}\" is: 0x{1:X8}, {1}",
                          Operand, HashCode );
    }
}
/*
      This example displays output like the following:
      The hash code for "" is: 0x2D2816FE, 757602046
      The hash code for "a" is: 0xCDCAB7BF, -842352705
      The hash code for "ab" is: 0xCDE8B7BF, -840386625
      The hash code for "abc" is: 0x2001D81A, 536991770
      The hash code for "abd" is: 0xC2A94CB5, -1029092171
      The hash code for "abe" is: 0x6550C150, 1699791184
      The hash code for "abcdef" is: 0x1762906D, 392335469
      The hash code for "abcdeg" is: 0x1763906D, 392401005
      The hash code for "abcdeh" is: 0x175C906D, 391942253
      The hash code for "abcdei" is: 0x175D906D, 392007789
      The hash code for "Abcdeg" is: 0x1763954D, 392402253
      The hash code for "Abcdeh" is: 0x175C954D, 391943501
      The hash code for "Abcdei" is: 0x175D954D, 392009037
*/


.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 시스템 요구 사항을 참조하십시오.

커뮤니티 추가 항목

추가
표시:
© 2015 Microsoft