ValueType.GetHashCode ValueType.GetHashCode ValueType.GetHashCode ValueType.GetHashCode Method

定义

返回此实例的哈希代码。Returns the hash code for this instance.

public:
 override int GetHashCode();
public override int GetHashCode ();
override this.GetHashCode : unit -> int
Public Overrides Function GetHashCode () As Integer

返回

一个 32 位带符号整数,它是此实例的哈希代码。A 32-bit signed integer that is the hash code for this instance.

示例

下面的示例演示如何使用派生值类型重写 GetHashCode 方法。The following example demonstrates how the GetHashCode method can be overridden by a derived value type.

public ref struct Complex
{
public:
   double m_Re;
   double m_Im;
   virtual bool Equals( Object^ ob ) override
   {
      if ( dynamic_cast<Complex^>(ob) )
      {
         Complex^ c = dynamic_cast<Complex^>(ob);
         return m_Re == c->m_Re && m_Im == c->m_Im;
      }
      else
      {
         return false;
      }
   }

   virtual int GetHashCode() override
   {
      return m_Re.GetHashCode() ^ m_Im.GetHashCode();
   }
};
public struct Complex 
{
    public double m_Re;
    public double m_Im;

    public override bool Equals( object ob ){
        if( ob is Complex ) {
            Complex c = (Complex) ob;
            return m_Re==c.m_Re && m_Im==c.m_Im;
        }
        else {
            return false;
        }
    }

    public override int GetHashCode(){
        return m_Re.GetHashCode() ^ m_Im.GetHashCode();
    }
}
Public Structure Complex
   Private m_Re As Double
   Private m_Im As Double
       
   Public Overloads Function Equals(ob As Object) As Boolean
      If TypeOf ob Is Complex Then
         Dim c As Complex = CType(ob, Complex)
         Return m_Re = c.m_Re And m_Im = c.m_Im
      Else
         Return False
      End If
   End Function
   
   
   Public Overloads Function GetHashCode() As Integer
      Return m_Re.GetHashCode() ^ m_Im.GetHashCode()
   End Function

End Structure

注解

@No__t-0 方法适用于从 @no__t 派生的类型。The GetHashCode method applies to types derived from ValueType. 派生类型的一个或多个字段用于计算返回值。One or more fields of the derived type is used to calculate the return value. 如果调用派生类型的 GetHashCode 方法,则返回值不可能适合用作哈希表中的键。If you call the derived type's GetHashCode method, the return value is not likely to be suitable for use as a key in a hash table. 此外,如果其中一个或多个字段的值发生更改,则返回值可能不适合用作哈希表中的键。Additionally, if the value of one or more of those fields changes, the return value might become unsuitable for use as a key in a hash table. 在任一情况下,请考虑编写你自己的 GetHashCode 方法的实现,该实现更密切地表示该类型的哈希代码的概念。In either case, consider writing your own implementation of the GetHashCode method that more closely represents the concept of a hash code for the type.

有关详细信息,请参阅 Object.GetHashCodeSystem.Collections.HashtableFor more information, see Object.GetHashCode, and System.Collections.Hashtable.

@No__t 的说明-0Notes for the Windows 运行时Windows Runtime

Windows 运行时Windows Runtime 结构调用 GetHashCode 方法时,它为不重写 GetHashCode 的值类型提供默认行为。When you call the GetHashCode method on a Windows 运行时Windows Runtime structure, it provides the default behavior for value types that don't override GetHashCode. 这是 .NET Framework 为 @no__t 提供的支持的一部分(请参阅Windows 应用商店应用和 Windows 运行时 .NET Framework 支持)。This is part of the support that the .NET Framework provides for the Windows 运行时Windows Runtime (see .NET Framework Support for Windows Store Apps and Windows Runtime). Windows 运行时Windows Runtime 结构不能重写 GetHashCode,即使它们是用C#或 Visual Basic 编写的,因为它们不能有方法。structures can't override GetHashCode, even if they're written with C# or Visual Basic, because they can't have methods. (此外,@no__t 中的结构不会继承 ValueType。)但是,当你在C#或 Visual Basic 代码中使用它们时,它们看起来有 ToStringEquals 和 @no__t 2 方法,而 .NET Framework 提供这些方法的默认行为。(In addition, structures in the Windows 运行时Windows Runtime itself don't inherit ValueType.) However, they appear to have ToString, Equals, and GetHashCode methods when you use them in your C# or Visual Basic code, and the .NET Framework provides the default behavior for these methods.

适用于