这个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);