Object.GetHashCode() मेथड वर्तमान ऑब्जेक्ट के लिए हैश कोड लौटाता है। हैश कोड एक इंटीजर है जिसका उपयोग हैश-आधारित संग्रहों (जैसे Hashtable, Dictionary, HashSet) में त्वरित तुलना और संग्रहण के लिए किया जाता है।
उदाहरण 1: ऐरे टाइप का हैश कोड
using System;
public class Demo {
public static void Main() {
string[] arr = { "tom", "amit", "kevin", "katie" };
// ऐरे का टाइप प्राप्त करें
Type t1 = arr.GetType();
// एलिमेंट टाइप प्राप्त करें (string)
Type t2 = t1.GetElementType();
Console.WriteLine("टाइप = " + t2.ToString());
Console.WriteLine("हैश कोड = " + t1.GetHashCode());
}
}
आउटपुट
टाइप = System.String
हैश कोड = 9144789
उदाहरण 2: एनम टाइप का हैश कोड और विवरण
using System;
public class Demo {
public enum Vehicle { Car, Bus, Bike, Airplane }
public static void Main() {
try {
Vehicle v = Vehicle.Bike;
Type type = v.GetType();
Console.WriteLine("हैश कोड = " + type.GetHashCode());
// एनम नाम प्राप्त करें
string[] names = type.GetEnumNames();
Console.WriteLine("एनम नाम = " + string.Join(", ", names));
// अंडरलाइंग टाइप
Type underlying = type.GetEnumUnderlyingType();
Console.WriteLine("एनम अंडरलाइंग टाइप = " + underlying);
// एनम मान प्राप्त करें
Array values = type.GetEnumValues();
Console.WriteLine("एनम मान = " + values);
Console.WriteLine("\nकॉन्स्टेंट्स सूची...");
for (int i = 0; i < names.Length; i++) {
Console.Write(names[i] + " ");
}
}
catch (ArgumentException e) {
Console.WriteLine("एनम नहीं है! " + e.Message);
}
}
}
आउटपुट
हैश कोड = 44757566
एनम नाम = Car, Bus, Bike, Airplane
एनम अंडरलाइंग टाइप = System.Int32
एनम मान = Demo+Vehicle[]
कॉन्स्टेंट्स सूची...
Car Bus Bike Airplane
GetHashCode महत्वपूर्ण नियम
- समान ऑब्जेक्ट्स = समान हैश कोड: यदि
a.Equals(b)तोa.GetHashCode() == b.GetHashCode()होना चाहिए। - विपरीत आवश्यक नहीं: समान हैश कोड का अर्थ समान ऑब्जेक्ट नहीं (कोलिजन संभव)।
- स्थिरता: ऑब्जेक्ट के जीवनकाल में हैश कोड नहीं बदलना चाहिए (यदि इम्यूटेबल फील्ड्स पर आधारित है)।
- प्रदर्शन: तेज़ गणना होनी चाहिए।
कस्टम क्लास में ओवरराइड करना
public class Person {
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj) {
return obj is Person other && Name == other.Name && Age == other.Age;
}
public override int GetHashCode() {
// संयुक्त हैश कोड (प्राइम नंबर्स का उपयोग)
return HashCode.Combine(Name, Age); // .NET Core 2.1+
// या मैन्युअल:
// unchecked { return (Name?.GetHashCode() ?? 0) * 397 ^ Age; }
}
}
चेतावनी
म्यूटेबल ऑब्जेक्ट्स में GetHashCode ओवरराइड करते समय सावधानी बरतें - यदि हैश कोड में उपयोग किए गए फील्ड्स बदलते हैं, तो ऑब्जेक्ट हैश-आधारित संग्रहों में "खो" सकता है।