Questo è per lo più accademico, ma stavo considerando l'implementazione di Equals() per ValueTypes. Il codice sorgente è qui: http://referencesource.microsoft.com/#mscorlib/system/valuetype.cs#38Come posso chiamare FastEqualsCheck()?
Il codice che ha attirato la mia attenzione è stata questa:
// if there are no GC references in this object we can avoid reflection
// and do a fast memcmp
if (CanCompareBits(this))
return FastEqualsCheck(thisObj, obj);
FastEqualsCheck() è dichiarato come segue:
[System.Security.SecuritySafeCritical]
[ResourceExposure(ResourceScope.None)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern bool FastEqualsCheck(Object a, Object b);
mia comprensione è che il ' [MethodImplAttribute (MethodImplOptions.InternalCall)] 'indica che questo è implementato nel CLR (fonte non disponibile), ma ho pensato di poterlo chiamare direttamente dal mio codice. Quando provo, ho un SecurityException
ECall methods must be packaged into a system module.
Posso fare queste chiamate me stesso (o sono destinati per il consumo interno)? Se posso chiamarli direttamente, qual è il modo appropriato di farlo?
Correlato: [SecurityException: i metodi ECall devono essere inseriti in un modulo di sistema] (http://stackoverflow.com/questions/11286004/securityexception-ecall-methods-must-be-packaged-into-a-system-module) –
Perché in realtà vuoi chiamarlo? – leppie
@leppie Secondo la domanda, questo è semplicemente accademico, non vi è alcuna applicazione pratica in mente. – Servy