委託WaitCallback和Action共享相同的簽名。儘管如此,由於下面的代碼證明,他們不能被視爲同一類型。爲什麼不能將一個Action <Object>委託用作Threadpool的WaitCallback?
static void Main(string[] args)
{
WaitCallback wcb = (o) => Console.WriteLine("Hello from wcb delegate");
ThreadPool.QueueUserWorkItem(wcb);//works
Action<object> action = (o) => Console.WriteLine("Hello from action<object> delegate");
ThreadPool.QueueUserWorkItem(action);//does not compile: Cannot convert from Action<object> to WaitCallback
Console.ReadLine();
}
我對這個觀察兩個問題:
1)爲什麼會這樣具有相同簽名但不同的名稱代表不被視爲同一類型?語言設計團隊可能選擇不同還是會導致不一致或其他問題?
2)當Action委託在.Net Framework 2.0中引入的地方時,WaitCallback已經存在。我不知道是不是這種情況,是否有理由引入額外的委託類型WaitCallback而不是使用Action?
謝謝, 亨克
感謝喬伊的精心答覆。你的表述方式讓我更瞭解代表的工作方式。您對方法名稱的解釋稱爲代表,這是一個不錯的獎勵。 – HenkGijsbert