# ValueType.GetHashCode 方法

## 定义

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

Int32

## 示例

``````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
``````

## 注解

GetHashCode方法适用于从派生的类型 ValueTypeThe 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.

### Windows 运行时的说明Notes for the Windows Runtime

GetHashCode Windows 运行时结构上调用方法时，它为不重写的值类型提供默认行为 GetHashCodeWhen you call the GetHashCode method on a Windows Runtime structure, it provides the default behavior for value types that don't override GetHashCode. 这是 .NET Framework 为 Windows 运行时提供的支持的一部分 (参阅对 Windows 应用商店应用的 .NET Framework 支持和 Windows 运行时) 。This is part of the support that the .NET Framework provides for the Windows Runtime (see .NET Framework Support for Windows Store Apps and Windows Runtime). Windows 运行时结构不能重写 GetHashCode ，即使它们是使用 c # 或 Visual Basic 编写的，因为它们不能有方法。Windows Runtime structures can't override GetHashCode, even if they're written with C# or Visual Basic, because they can't have methods. (此外，Windows 运行时本身中的结构不会继承 ValueType 。 ) 但是，在 ToString Equals GetHashCode c # 或 Visual Basic 代码中使用它们时，它们似乎具有、和方法，而 .NET Framework 提供这些方法的默认行为。(In addition, structures in the 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.