سؤال

تكرار ممكن:
ما هي أفضل خوارزمية لنظام تم تجاوزه.كائن.جيثاشكود?

هذا معروف لنا أنه إذا تجاوزنا Equals طريقة Object في الأنواع المخصصة لدينا ، يجب علينا أيضا تجاوز وتوفير تنفيذ GetHashCode طريقة لدعم توليد رموز التجزئة فريدة من نوعها لاستخدامها في دعم Hashtable و Dictionary فئات جمع وقد تكون فئات أخرى.

هذا يفرض علينا تنفيذ خوارزمية التجزئة المستخدمة داخل موقعنا overriden GetHashCode الطريقة هي الأمثل ودقيقة أي.فإنه يولد تجزئة فريدة من نوعها من نوع وأيضا يفعل ذلك في أسرع وقت ممكن لتحسين أداء التطبيق الذي يستخدم نوع لدينا.

سؤالي هو أي خوارزميات التجزئة دقيقة وتعطي الأداء الأمثل عند استخدامها في GetHashCode تنفيذ?أو ، هل يجب أن نستخدم النوع الأساسي فقط GetHashCode تنفيذ?أود أن أعرف هذه الإجابة لكليهما value types و reference types..

تحرير:في ما يلي مثال على فصل دراسي أدناه حول سبب حاجتي إلى التجاوز Equals:

public class Laptop : LaptopBase
{
    public readonly string Make;
    public readonly string ProcessorArch;
    public readonly int MemorySupported;
    public readonly int HardDiskGBSupported;
    public readonly Color ColorName;

    public Laptop(make, procArch, memorySupp, hdGB, color)
    {
        Make = make;
        ProcessorArch = procArch;
        MemorySupported = memorySupp;
        HardDiskGBSupported = hdGB;
        ColorName = color;
    }
}

الآن ، أريد أن أعود صحيحا لمثيلات الكمبيوتر المحمول 2 التي تحتوي على جميع الحقول المحددة أعلاه مطابقة مع بعضها البعض بحيث يتطلب تجاوز Equals و GetHashCode طريقة وأيضا شرط آخر كما ترون هو أن هذا هو فئة مشتقة ويمكن إعادة استخدامها كذلك ودعم عدد من الأساليب;وبالتالي ، لا يمكن إجراء نوع القيمة (البنية).حاولت مع 2 مثيلات من النوع أعلاه مع جميع حقول المثيل المطابقة وإذا كنت تستخدم التنفيذ الأساسي لـ Equals - يعود false حيث أريد أن يكون true.. كيف يمكنني دعم مثل هذا السيناريو?

هل كانت مفيدة؟

المحلول

ذلك يعتمد على نوع يتم تنفيذه على ، ولكن يجب أن تعطي تشتت جيدة من القيم وأنه ليس من الضروري ل جيثاشكود() لإرجاع قيم فريدة من نوعها.يجب أن تستند إلى تلك الحقول المستخدمة في التنفيذ المتساوي ويجب أن تكون هذه الحقول غير قابلة للتغيير.لذلك متطلبات يساوي / جيثاشكود هي نفسها للبنى والطبقات.

وكما قال هينك ، فمن الأفضل عدم تجاوز يساوي/جيثاشكود على الإطلاق...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top