你好,我在理解这种语法方面遇到了一些小问题。
public delegate void DelegateType();
BeginInvoke(new DelegateType(functionName));
有人能告诉我new DelegateType(functionName)的确切含义吗?为什么我需要使用new关键字?
BeginInvoke
不采用特定的委托类型(例如System.Action
),因此您始终需要显式地创建委托实例。第一条语句声明了一个委托类型,第二条语句实例化了一个新的DelegateType
委托。
从相应的MSDN文章中(阅读文章以获取更多信息!):
一旦声明了委托类型,就必须创建一个委托对象并将其与特定方法关联。像所有其他对象一样,使用new表达式创建一个新的委托对象。但是,在创建委托时,传递给new表达式的参数是特殊的-它写得像对方法的调用,但没有方法的参数。
public delegate void DelegateType();
这定义了委托的语法。这是对一个方法的引用,可以是静态方法或实例方法。
当您调用BeginInvoke时,将委托作为参数传递。C#编译器将从任何显式委托类型转换为System.Delegate,但由于参数被定义为接受任何委托(通过System.Delegate),因此必须明确定义类型。
当您指定:
new DelegateType(functionName)
您正在创建一个特定类型(DelegateType)的委托,然后将其传递给函数。
通常,较新的API将使用已知类型,如System.Action(其语法与您的DelegateType相同)。如果方法需要一个“Action”,则您不需要上面的定义,可以这样做:
CallMethodTakingAction(functionName);