ものがたり(旧)

atsushieno.hatenablog.com に続く

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)って書かなきゃいけない、と。