您好 理解这种语法我有点问题
public delegate void DelegateType();
BeginInvoke(new DelegateType(functionName));
有人可以告诉我新的DelegateType(functionName)是什么意思。为什么我必须使用新关键字??
答案 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'。