SORU
6 NİSAN 2009, PAZARTESİ


Nesne için varsayılan uygulama.()GetHashCode

Nasıl GetHashCode() iş için varsayılan uygulama mı? Ve yapıları, sınıflar, diziler, vb ele alır. verimli ve yeterince iyi mi?

Güvenli varsayılan uygulama üzerinde iyi yapmak için kullanır elimden geldiğince kendim toplamam gerektiğini ve karar vermeye çalışıyorum. Eğer tekerlek, Olası yeniden icat etmek istemiyorum.

CEVAP
6 NİSAN 2009, PAZARTESİ


namespace System {
    public class Object {
        [MethodImpl(MethodImplOptions.InternalCall)]
        internal static extern int InternalGetHashCode(object obj);

        public virtual int GetHashCode() {
            return InternalGetHashCode(this);
        }
    }
}

İnternalGetHashCodebir eşleştirilmiş::ObjectNative GetHashCodeşöyle bir CLR işlevi:

FCIMPL1(INT32, ObjectNative::GetHashCode, Object* obj) {  
    CONTRACTL  
    {  
        THROWS;  
        DISABLED(GC_NOTRIGGER);  
        INJECT_FAULT(FCThrow(kOutOfMemoryException););  
        MODE_COOPERATIVE;  
        SO_TOLERANT;  
    }  
    CONTRACTL_END;  

    VALIDATEOBJECTREF(obj);  

    DWORD idx = 0;  

    if (obj == 0)  
        return 0;  

    OBJECTREF objRef(obj);  

    HELPER_METHOD_FRAME_BEGIN_RET_1(objRef);        // Set up a frame  

    idx = GetHashCodeEx(OBJECTREFToObject(objRef));  

    HELPER_METHOD_FRAME_END();  

    return idx;  
}  
FCIMPLEND

Tam olarak uygulanmasıGetHashCodeExoldukça büyük, daha kolay sadece the C source code link.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BaaaStuds's channel

    BaaaStuds's

    10 Mart 2009
  • Edge-CGI 3D Tutorials and more!

    Edge-CGI 3D

    11 HAZİRAN 2013
  • martin shervington

    martin sherv

    7 EKİM 2011