Thomas Darimont
Erfahrenes Mitglied
Hallo,
hier mal ein Beispiel dafür wie man von einer Instanz den sogenannten IdentityHashCode (der Rückgabewert der System.Object.GetHashCode -Methode) ermitteln kann, selbst wenn das jeweilige Objekt die GetHashCode Methode überschreibt.
Beispiel-Ausgabe:
Der IdentityHashCode ist beispielsweise in den Szenarien interessant in denen man Instanzen als Keys für Hash-basierte Collections einsetzen möchte.
Gruß Tom
hier mal ein Beispiel dafür wie man von einer Instanz den sogenannten IdentityHashCode (der Rückgabewert der System.Object.GetHashCode -Methode) ermitteln kann, selbst wenn das jeweilige Objekt die GetHashCode Methode überschreibt.
C#:
using System;
using System.Collections.Generic;
using System.Text;
namespace De.Tutorials.Training
{
public class IdentityHashCodeExample
{
public static void Main(string[] args)
{
Bu foo = new Bu("hallo");
Bu bar = new Bu("hallo");
Console.WriteLine(foo.Equals(bar));
Console.WriteLine(bar.Equals(foo));
Console.WriteLine("Bu.GetHashCode() foo -> " + foo.GetHashCode());
Console.WriteLine("Bu.GetHashCode() bar -> " + bar.GetHashCode());
Console.WriteLine("Object.GetHashCode() foo -> " + foo.BaseGetHashCode());
Console.WriteLine("Object.GetHashCode() bar -> " + bar.BaseGetHashCode());
Console.WriteLine("Object.GetHashCode() foo -> " + System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(foo));
Console.WriteLine("Object.GetHashCode() bar -> " + System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(bar));
}
}
public class Bu
{
string data;
public Bu(string data)
{
this.data = data;
}
public int BaseGetHashCode()
{
return base.GetHashCode();
}
public override int GetHashCode()
{
return data.GetHashCode();
}
public override bool Equals(object obj)
{
if (!(obj is Bu))
{
return false;
}
return this.data.Equals(((Bu)obj).data);
}
}
}
Beispiel-Ausgabe:
Code:
True
True
Bu.GetHashCode() foo -> 7954913
Bu.GetHashCode() bar -> 7954913
Object.GetHashCode() foo -> 58225482
Object.GetHashCode() bar -> 54267293
Object.GetHashCode() foo -> 58225482
Object.GetHashCode() bar -> 54267293
Drücken Sie eine beliebige Taste . . .
Der IdentityHashCode ist beispielsweise in den Szenarien interessant in denen man Instanzen als Keys für Hash-basierte Collections einsetzen möchte.
Gruß Tom