C# 与c语言中委托声明的区别#
可能重复:C# 与c语言中委托声明的区别#,c#,delegates,C#,Delegates,可能重复: 因此,我通过了一点授权,不知怎么地了解了整个想法。 现在,我到处都能看到这样的例子: public delegate void Deleg(); Deleg deleg = new Deleg(FunctionName); deleg(); public delegate void Deleg(); public Deleg deleg; deleg = FunctionName; deleg(); 我认为这会创建一个委托对象,其函数指向作为参数传递给构造函数 现在,
因此,我通过了一点授权,不知怎么地了解了整个想法。 现在,我到处都能看到这样的例子:
public delegate void Deleg();
Deleg deleg = new Deleg(FunctionName);
deleg();
public delegate void Deleg();
public Deleg deleg;
deleg = FunctionName;
deleg();
我认为这会创建一个委托对象,其函数指向作为参数传递给构造函数
现在,我也可以这样做:
public delegate void Deleg();
Deleg deleg = new Deleg(FunctionName);
deleg();
public delegate void Deleg();
public Deleg deleg;
deleg = FunctionName;
deleg();
这个函数似乎只创建了一个引用,并且传递了函数的地址。它的工作原理相同,并且具有所有委托功能
但是现在,不管我在第二个示例中还有一行,因为第一行在教程中更受欢迎,所以我是否真的从第二行中丢失或获得了一些东西?增加的内容是少键入一点。编译器现在比最初更智能,因此它可以隐式地进行方法组转换,这就是为什么不再需要执行
new-Deleg(FunctionName)
如果在同一行上添加赋值(与第一个示例中一样),则键入的代码量大致相同
public delegate void Deleg();
public Deleg deleg = FunctionName;
deleg();
二是委托推理 该方法是否按顺序和类型与委托的输入参数列表匹配
- 是->由于方法签名与委托的签名匹配,因此会推断委托
- 否->委托和方法输入参数不匹配。不可能进行委托类型推断
public delegate void Do();
Do some = () =>
{
// Do stuff
};
或
实际上,这与类型推断无关。@HenkHotlerman毕竟委托是一种类型。这就是为什么我说的是委托类型推断,而不仅仅是类型推断。@Henkholtman我编辑过这个。。。现在到处都可以找到委托推理。不管怎么说,我相信这一点都不错。是的,我的错是这是一个真正的复制品。我应该删除这个问题吗?你不能再删除它了。就让投票顺其自然吧。好吧,谢谢你,我是在问,因为我在这台计算机上没有visual studio命令提示符来查看IL。