Это в основном академический, но я смотрел на реализацию Equals() для ValueTypes. Исходный код здесь: http://referencesource.microsoft.com/#mscorlib/system/valuetype.cs#38
Код, который попался мне на глаза, был следующим:
// 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() объявляется следующим образом:
[System.Security.SecuritySafeCritical]
[ResourceExposure(ResourceScope.None)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern bool FastEqualsCheck(Object a, Object b);
Я понимаю, что '[MethodImplAttribute (MethodImplOptions.InternalCall)] указывает, что это реализовано в CLR (источник недоступен), но я думал, что смогу называть его непосредственно из моего кода. Когда я пытаюсь, я получаю SecurityException
ECall methods must be packaged into a system module.
Могу ли я самостоятельно совершать эти звонки (или они предназначены только для внутреннего потребления)? Если я могу назвать их напрямую, каков подходящий способ сделать это?