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(请参阅注释),原因很简单,因为 string 继承自 object。同样,为什么它会抱怨匿名方法类型(请参阅注释 //case 4:)
无法将匿名方法转换为委托类型“DelegateTest.Program.Srini”,因为参数类型与委托参数类型不匹配
在正常方法的情况下,哪里没有?或者我是在比较苹果和橙子吗?
另一种情况是为什么它接受不带参数的匿名方法?
方法组转换支持方差(从 C# 2 开始 - 在 C# 1 中不支持),而匿名函数转换则不支持。鉴于每当你编写匿名函数时can写出适当的参数,为什么不这样做呢?据我所知,允许存在差异没有任何好处,而且会使规则更难正确制定。 (规范中的方差最终变得非常复杂。)
编辑:没有参数列表的匿名方法基本上与任何委托的参数列表兼容,只要它没有out
参数。基本上,这是一种说法,“我不关心参数。”这是one匿名方法的特性是 lambda 表达式所没有的:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)