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

String.GetHashCode 메서드 ()

 

게시 날짜: 2016년 11월

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

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

public override int GetHashCode()

반환 값

Type: System.Int32

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

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

System_CAPS_important중요

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

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

결과적으로 해시 코드 작성 된 응용 프로그램 도메인 외부에서 사용할 수는 없습니다는 컬렉션의 키 필드와 사용 하지 않아야 하 고 유지 되지 않도록 합니다.

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

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

데스크톱 앱에서 사용할 수 있습니다는 <UseRandomizedStringHashAlgorithm>요소 에 고유한 해시 코드를 생성 하는 응용 프로그램 도메인 단위로.</UseRandomizedStringHashAlgorithm> 수 충돌 수 줄이고 삽입 및 해시 테이블을 사용 하는 조회의 전체 성능을 향상 시킵니다. 사용 하는 방법을 보여 주는 다음 예제는 <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 이후 사용 가능
맨 위로 이동
표시: