มันไม่จำเป็นว่าสำคัญ ขึ้นอยู่กับขนาดของคอลเลกชันและข้อกำหนดด้านประสิทธิภาพของคุณและคลาสของคุณจะถูกใช้ในห้องสมุดที่คุณอาจไม่ทราบข้อกำหนดด้านประสิทธิภาพหรือไม่ ฉันรู้ว่าขนาดคอลเล็กชั่นของฉันไม่ใหญ่มากและเวลาของฉันมีค่ามากกว่าประสิทธิภาพสองสามไมโครวินาทีโดยการสร้างรหัสแฮชที่สมบูรณ์แบบ ดังนั้น (เพื่อกำจัดคำเตือนที่น่ารำคาญโดยคอมไพเลอร์) ฉันใช้:
public override int GetHashCode()
{
return base.GetHashCode();
}
(แน่นอนฉันสามารถใช้ #pragma เพื่อปิดคำเตือนได้ แต่ฉันชอบวิธีนี้)
เมื่อคุณอยู่ในตำแหน่งที่คุณไม่จำเป็นต้องมีประสิทธิภาพกว่าทุกประเด็นที่กล่าวถึงโดยคนอื่น ๆ ที่นี่ใช้ของหลักสูตร สิ่งสำคัญที่สุด - ไม่เช่นนั้นคุณจะได้รับผลที่ผิดเมื่อดึงรายการจากชุดแฮชหรือพจนานุกรม: รหัสแฮชจะต้องไม่เปลี่ยนแปลงตามอายุการใช้งานของวัตถุ (แม่นยำยิ่งขึ้นในช่วงเวลาที่ต้องการรหัสแฮชเช่นในขณะที่ถูก คีย์ในพจนานุกรม): ตัวอย่างเช่นต่อไปนี้ผิดเนื่องจากค่าเป็นแบบพับลิกและสามารถเปลี่ยนเป็นคลาสภายนอกได้ในช่วงเวลาชีวิตของอินสแตนซ์ดังนั้นคุณต้องไม่ใช้เป็นพื้นฐานสำหรับรหัสแฮช:
class A
{
public int Value;
public override int GetHashCode()
{
return Value.GetHashCode(); //WRONG! Value is not constant during the instance's life time
}
}
ในทางกลับกันหากไม่สามารถเปลี่ยนค่าได้มันก็สามารถใช้งานได้:
class A
{
public readonly int Value;
public override int GetHashCode()
{
return Value.GetHashCode(); //OK Value is read-only and can't be changed during the instance's life time
}
}