Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与c语言中委托声明的区别#_C#_Delegates - Fatal编程技术网

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。