5

我发现在 Array.Sort 里面,

[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail), SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool TrySZSort(Array keys, Array items, int left, int right);

被调用。任何想法如何实现?

4

2 回答 2

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(),该方法由数组元素类型专门用于值类型元素。

这正是托尼·霍尔在 52 年前写下它的方式。尽管不是在 C++ 中;)

您会在此答案中找到此代码是用 C++ 而不是 C# 编写的原因。

于 2012-08-14T01:34:49.153 回答
4

任何想法如何实现?

该方法在 CLR 本身内部的本机代码中实现。在非常核心的低级类型上有很多这样的方法。例如,相当多的方法System.String被标记为InternalCall并在公共语言运行时本身中实现。

于 2012-08-14T01:12:47.467 回答