コンテンツへスキップ
ものがたり
戻る

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[])ということになるわけですな。genericでないSort()を呼び出そうと思ったらSort((Array) chars)って書かなきゃいけない、と。


この記事を共有:

前の記事
2005-11-18
次の記事
2005-11-16