Sort() and Sort<>()
using System;class Foo
{
public static void Main () { new Foo ().Run (); }public void Sort (Array array) { Console.WriteLine ("#1"); }
public void Sort
(T [] array) { Console.WriteLine ("#2"); } void Run ()
{
char [] chars = new char [] {'A', 'D', 'B', 'C'};
Sort (chars);
Sort(chars);
}
}
常に#2の方しか呼ばれなくて、ちょっとハマった。C#のgenericsで生成されるILってランタイム上の動的型生成だから、ILのcall(やcallvirt)でSortって書いてあるのを呼び出したら、最適なマッチングはSort<char>(char[])ということになるわけですな。genericでないSort()を呼び出そうと思ったらSort((Array) chars)って書かなきゃいけない、と。