Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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#_Syntax_Delegates - Fatal编程技术网

这个c#语法是什么意思?

这个c#语法是什么意思?,c#,syntax,delegates,C#,Syntax,Delegates,嗨 我在理解这种语法方面有点问题 public delegate void DelegateType(); BeginInvoke(new DelegateType(functionName)); 谁能告诉我新的DelegateType(functionName)的确切含义是什么。为什么我必须使用新关键字???请参阅 委托是一种包含方法的类型。 您正在创建委托类型的新实例,指向现有方法 C#2添加从方法组到任何匹配委托类型的隐式转换。 但是,由于BeginInvoke不采用特定的委托类型(例如

嗨 我在理解这种语法方面有点问题

public delegate void DelegateType();
BeginInvoke(new DelegateType(functionName));
谁能告诉我新的DelegateType(functionName)的确切含义是什么。为什么我必须使用新关键字???

请参阅

委托是一种包含方法的类型。
您正在创建委托类型的新实例,指向现有方法

C#2添加从方法组到任何匹配委托类型的隐式转换。

但是,由于
BeginInvoke
不采用特定的委托类型(例如
System.Action
),因此始终需要显式创建委托实例。

第一条语句声明委托类型,第二条语句实例化
DelegateType
的新委托

从相应的文章(阅读文章了解更多信息!):

一旦指定了委托类型 声明时,委托对象必须是 创建并与 特殊方法。像所有其他的 对象时,将创建一个新的委托对象 使用新表达式创建。什么时候 但是,创建委托时 参数传递给新表达式 是特别的-它写得像一个 方法调用,但不带参数 对方法进行了修改

这定义了的语法。这是对方法(静态方法或实例方法)的引用

调用时,您正在传递一个委托作为参数。C#编译器将从任何显式委托类型转换为System.delegate,但由于该参数定义为接受任何委托(via),因此必须显式定义该类型

当您指定:

new DelegateType(functionName)
您正在创建一个特定类型(DelegateType)的委托,然后将其传递给函数

通常,较新的API将使用已知类型,例如(与您的DelegateType具有相同的语法)。如果一个方法采取了“动作”,您不需要上面的定义,您可以这样做:

CallMethodTakingAction(functionName);

“DelegateType”只是一种类型,所以像其他类型一样,如果您想说“这是此类型的一个实例”,您需要使用“new”。

回答得很好,您能告诉我内存是如何分配的吗。我是否正确地假设编译器为委托分配内存?@Sandeep:唯一真正的内存分配是为委托本身分配的,它只是一个引用。这是一个难以置信的小内存量。
CallMethodTakingAction(functionName);