public abstract class Comparer<T> : IComparer, IComparer<T>
{
static Comparer<T> defaultComparer;
public static Comparer<T> Default {
get {
Comparer<T> comparer = defaultComparer;
if (comparer == null) {
comparer = CreateComparer();
defaultComparer = comparer;
}
return comparer;
}
}
まず、Default プロパティはスレッドセーフですか? 次のステートメントの効果は可能ではないでしょうか
comparer = CreateComparer();
スレッドを作成する以外のスレッドには表示されない可能性がありますか? では、複数の Comparer インスタンスが構築されるのでしょうか?
Microsoft がこれを行っているのは、複数のオブジェクトを作成するコストと同期のコストを削減するためですか?
第二に、なぜ defaultComparer が最初に比較変数に割り当てられ、その後スワップされるのでしょうか? なぜ Comparer は比較者 = defaultComparer なのですか?