Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức SByte.GetHashCode() trong C# với các ví dụ

Giới thiệu

Phương thức SByte.GetHashCode() trong C# trả về mã băm (hash code) cho thể hiện sbyte hiện tại. sbyte là số nguyên 8-bit có dấu (phạm vi -128 đến 127).

Cú pháp

public override int GetHashCode ();

Ví dụ 1: Hash code của hai giá trị sbyte khác nhau

using System;

public class Demo {
    public static void Main() {
        sbyte s1 = 50;
        sbyte s2 = 75;

        Console.WriteLine("Giá trị của S1 = " + s1);
        Console.WriteLine("Giá trị của S2 = " + s2);
        Console.WriteLine("S1 và S2 có bằng nhau? = " + s1.Equals(s2));
        Console.WriteLine("HashCode cho s1 = " + s1.GetHashCode());
        Console.WriteLine("HashCode cho s2 = " + s2.GetHashCode()); // Sửa: dùng s2.GetHashCode()
    }
}

Đầu ra ví dụ 1

Giá trị của S1 = 50
Giá trị của S2 = 75
S1 và S2 có bằng nhau? = False
HashCode cho s1 = 50
HashCode cho s2 = 75

Ví dụ 2: So sánh sbyte với object (boxing)

using System;

public class Demo {
    public static void Main() {
        sbyte s1 = 55;
        object s2 = (sbyte)55; // Boxing

        Console.WriteLine("Giá trị của S1 = " + s1);
        Console.WriteLine("Giá trị của S2 = " + s2);

        int res = s1.CompareTo(s2);
        if (res > 0)
            Console.WriteLine("s1 > s2");
        else if (res < 0)
            Console.WriteLine("s1 < s2");
        else
            Console.WriteLine("s1 = s2");

        Console.WriteLine("HashCode cho s1 = " + s1.GetHashCode());
        Console.WriteLine("HashCode cho s2 = " + s2.GetHashCode()); // Gọi qua object
    }
}

Đầu ra ví dụ 2

Giá trị của S1 = 55
Giá trị của S2 = 55
s1 = s2
HashCode cho s1 = 55
HashCode cho s2 = 55

Đặc điểm hash code của sbyte

  • Với sbyte, hash code đơn giản là chính giá trị của nó (sau khi mở rộng thành int).
  • Ví dụ: (sbyte)50 → hash code 50; (sbyte)-10 → hash code -10 (hoặc 246 tùy triển khai, nhưng thường là giá trị int tương ứng).
  • Do miền giá trị nhỏ (-128..127), không có collision cho các giá trị khác nhau.
  • Hai giá trị sbyte bằng nhau luôn có cùng hash code.

Lưu ý về ví dụ gốc

Trong ví dụ gốc có lỗi in s1.GetHashCode() cho cả s1 và s2. Code đã được sửa trong ví dụ 1 ở trên.

So sánh với các kiểu số nguyên khác

KiểuPhạm viHash code
sbyte-128..127Giá trị int tương đương
byte0..255Giá trị int tương đương
short-32768..32767Giá trị int tương đương
int-2^31..2^31-1Chính giá trị int