5
public class Program
{
delegate void Srini(string param);
static void Main(string[] args)
{
Srini sr = new Srini(PrintHello1);
sr += new Srini(PrintHello2); //case 2:
sr += new Srini(delegate(string o) { Console.WriteLine(o); });
sr += new Srini(delegate(object o) { Console.WriteLine(o.ToString()); }); //case 4:
sr += new Srini(delegate { Console.WriteLine(「This line is accepted,though the method signature is not Comp」); });//case 5
sr("Hello World");
Console.Read();
}
static void PrintHello1(string param)
{
Console.WriteLine(param);
}
static void PrintHello2(object param)
{
Console.WriteLine(param);
}
}
編譯器不會抱怨案例2(請參閱註釋),好吧,原因是字符串從對象繼承後直接進行。按照同樣的思路,爲什麼會抱怨匿名方法的類型(見註釋//情況下4 :)是不能爲委託人指定一個不太具體的參數類型的匿名方法
無法轉換匿名方法委託類型「DelegateTest.Program.Srini」因爲參數類型不匹配代表參數類型
哪裏在正常方法的情況下它不?還是我比較蘋果和橘子? 另一種情況是爲什麼它接受不帶參數的匿名方法?
糟糕jon,這是一個錯字;它沒有。我指的是// case 5。我編輯了這個問題。 – 2010-05-06 07:16:51
@Srinivas:好的,我已經適當地編輯了答案。 – 2010-05-06 07:20:25