我在Array.Sort中找到了它,
[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail), SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool TrySZSort(Array keys, Array items, int left, int right);
被调用。 有任何想法如何实现?
答案 0 :(得分:11)
您可以从SSCLI20 source distribution获得相当可靠的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 ++编写的,而不是this answer中用C#编写的。
答案 1 :(得分:4)
有关如何实施的任何想法?
该方法在本机代码中实现,在CLR本身内部。在核心的低级别类型上有很多这样的方法。例如,System.String
上的很多方法都被标记为InternalCall,并在公共语言运行时本身中实现。