我发现在Array.Sort里面,
[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail), SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool TrySZSort(Array keys, Array items, int left, int right);
Run Code Online (Sandbox Code Playgroud)
被叫.有任何想法如何实现?
Han*_*ant 11
您可以从SSCLI20源代码分发中获得相当可靠的CLR源代码副本.它发布于2005年,当时是CLR版本2的一个非常准确的副本.从未发现明显的差异.
从那时起,7年前已经发生了变化,此后又发生了相当重要的CLR版本更新.但TrySZSort()仍然存在,那些低级实现是高度自我保留的.你会发现它在clr/src/vm/ecall.cpp中声明并映射到ArrayHelper :: TrySZSort(),这是在clr/src/vm/arrayhelpers.cpp中声明的C++方法
它非常无聊,它只是调用一个名为的模板类方法ArrayHelpers<T>.QuickSort(),由数组元素类型专门用于值类型元素.
这就是Tony Hoare 52年前写的那种方式.虽然不是在C++中;)
你会发现这段代码是用C++编写,而不是在C#中的原因,这个答案.
有什么想法如何实施吗?
该方法是在 CLR 内部的本机代码中实现的。在非常核心的低级类型上有很多类似的方法。例如,相当多的方法被System.String标记为InternalCall并在公共语言运行时本身中实现。