C#声明与要调用方法具有相同签名的委托

2024-11-24 05:33:27
推荐回答(2个)
回答1:

签名,即 Signature。一个函数由几部分组成:函数名称(其实严格来说 C# 里不叫函数名了,C++ 里才这么叫,应该叫方法名了,因为 C# 没有 Function,只有 Method)、参数个数、参数类型、返回值类型,这四部分共同组成一个函数签名。

同一个函数名称,其签名不同,调用的函数就不同。

比如 MessageBox.Show() 这个方法,传参可以是 (string Text),可以是 (string Text, string Title),也可以是 (string Text, string Title, enum Buttons),等等。虽然方法名是同一个 Show(),但其签名不通,所以结果就不同。

所谓委托,是一种特殊的类型,可以将一个方法当作另一个方法的参数传递。我曾在 http://zhidao.baidu.com/question/982387486699734619.html 回答过这个问题,比较详细,题主可以戳进去看一下。

题主这里有一个函数签名,void AsyncSndMsg(string)(函数名 AsyncSndMsg,参数个数1,参数类型 string,返回值类型 void),又有一个委托 SendMessageDelegate,如果这个想要把 AsyncSndMsg 当作委托类型传递给另一个方法,那么声明 SendMessageDelegate 时,其参数个数、参数类型、返回值类型必须和 AsyncSndMsg 的相同,也即签名相同。

回答2:

首先说什么是函数签名。
函数签名由函数的名称和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。
而委托可以理解为以函数作为参数的函数。那么该委托就必须具备和函数相同的参数列表(包括参数的顺序都要相同)。