이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

String.GetHashCode 메서드 ()

 

게시 날짜: 2016년 11월

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

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

public override int GetHashCode()

반환 값

Type: System.Int32

부호 있는 32비트 정수 해시 코드입니다.

동작 GetHashCode 공용 언어 런타임에의 한 버전에서 변경 될 수 있습니다 하는 구현에 따라 달라 집니다. 이 문제가 발생 하는 이유의 성능을 향상 시킬 것 GetHashCode합니다.

System_CAPS_important중요

두 string 개체 같으면는 GetHashCode 메서드는 동일한 값을 반환 합니다. 그러나 않습니다 각 고유한 문자열 값에 대 한 고유 해시 코드 값입니다. 서로 다른 문자열이 동일한 해시 코드를 반환할 수 있습니다.

해시 코드 자체는 안정성이 보장 되지 않습니다. 동일한 문자열에 대 한 해시 코드 및 단일 버전의.NET Framework에 대 한 플랫폼 (예: 32 비트 및 64 비트)에서.NET Framework의 버전 간에 다를 수 있습니다. 경우에 따라 응용 프로그램 도메인 별로 달라질도 수 있습니다.

결과적으로 생성 된 응용 프로그램 도메인 외부에서 코드를 사용 하지 않아야 하는 해시는 사용 하지 말아야 컬렉션의 키 필드로 및 유지 적 해야 합니다.

마지막으로, 강력 하 게 암호화 해시 해야 할 경우 암호화 해시 함수에서 반환 된 값 대신 해시 코드를 사용 하지 마십시오. 파생 클래스를 사용 하 여 암호화 해시는 System.Security.Cryptography.HashAlgorithm 또는 System.Security.Cryptography.KeyedHashAlgorithm 클래스입니다.

해시 코드에 대 한 자세한 내용은 참조 Object.GetHashCode합니다.

데스크톱 응용 프로그램에서 사용할 수는 < UseRandomizedStringHashAlgorithm > 요소 에 고유한 해시 코드를 생성 하는 응용 프로그램 도메인 단위로 합니다. 이렇게 충돌의 수를 줄일 하 고 삽입 및 해시 테이블을 사용 하는 조회의 전체 성능을 향상 시킵니다. 다음 예제를 사용 하는 방법을 보여 줍니다는 < UseRandomizedStringHashAlgorithm > 요소합니다. 정의에 고유한 해시 코드를 생성 하는 응용 프로그램 도메인 단위로 합니다. 이렇게 충돌의 수를 줄일 하 고 삽입 및 해시 테이블을 사용 하는 조회의 전체 성능을 향상 시킵니다. 다음 예제를 사용 하는 방법을 보여 줍니다는 합니다. 정의 DisplayString 개인 문자열 상수가 포함 된 클래스 s, 값이 인 "는 문자열입니다." 또한 포함는 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

System_CAPS_important중요

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

해시 코드의 사용에 대 한 자세한 내용은 및 GetHashCode 메서드를 참조 하십시오 Object.GetHashCode합니다.

호출자 참고 사항:

반환한 값 GetHashCode 은 플랫폼에 따라 다릅니다. 32 비트 및 64 비트 버전의.NET Framework에 점이 다릅니다. .NET Framework의 버전 간에 다 수 것입니다.

System_CAPS_warning경고

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

  • 해시 코드 값을 serialize 하거나 데이터베이스에 저장 하지 마십시오.

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

  • 암호화 해시 함수에서 반환 된 값 대신 해시 코드를 사용 하지 마십시오. 파생 클래스를 사용 하 여 암호화 해시는 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
*/

유니버설 Windows 플랫폼
8 이후 사용 가능
.NET Framework
1.1 이후 사용 가능
이식 가능한 클래스 라이브러리
이식 가능한 .NET 플랫폼 에서 지원됨
Silverlight
2.0 이후 사용 가능
Windows Phone Silverlight
7.0 이후 사용 가능
Windows Phone
8.1 이후 사용 가능
맨 위로 이동
표시: