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

时间:2011-01-16 18:49:32

标签: c# syntax delegates

您好 理解这种语法我有点问题

public delegate void DelegateType();
BeginInvoke(new DelegateType(functionName));

有人可以告诉我新的DelegateType(functionName)是什么意思。为什么我必须使用新关键字??

4 个答案:

答案 0 :(得分:6)

请参阅documentation

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

C#2添加了从方法组到任何匹配的委托类型的隐式转换 但是,由于BeginInvoke不采用特定的委托类型(例如System.Action),因此您始终需要显式创建委托实例。

答案 1 :(得分:1)

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

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

  

一旦委托类型一直存在   声明,委托对象必须是   创建并与之关联   特别的方法。像其他所有   对象,一个新的委托对象是   用新表达式创建。什么时候   然而,创建一个委托   参数传递给新表达式   很特别 - 它写得像   方法调用,但没有参数   方法。

答案 2 :(得分:1)

 public delegate void DelegateType();

这定义了delegate的语法。这是对方法的引用,无论是静态方法还是实例方法。

当您致电BeginInvoke时,您将传递委托作为参数。 C#编译器将从任何显式委托类型转换为System.Delegate,但由于该参数被定义为接受任何委托(通过System.Delegate),因此必须明确定义类型。

指定时:

new DelegateType(functionName)

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

通常,较新的API将使用已知类型,例如System.Action(其语法与DelegateType相同)。如果某个方法采用“操作”,则您不需要上面的定义,您可以这样做:

CallMethodTakingAction(functionName);

答案 3 :(得分:0)

'DelegateType'只是一种东西,所以像任何其他类型一样,你想说“这是这种类型的一个实例”,你需要使用'new'。