C#中默认委托的名称是什么,它不带参数并返回void?我记得有一位代表,但我不记得它的名字。
答案 0 :(得分:12)
在.NET 3.5之前,声明自己是相当普遍的。现在,Action
是一个很好的候选者,但ThreadStart
常用(相当容易混淆),或者MethodInvoker
如果你已经引用了winforms。
快速测试(注意,在.NET 4.0中运行,只使用一些库 - 所以并非详尽无遗):
var qry = from asm in AppDomain.CurrentDomain.GetAssemblies()
from type in asm.GetTypes()
where type.IsSubclassOf(typeof(Delegate))
let method = type.GetMethod("Invoke")
where method != null && method.ReturnType == typeof(void)
&& method.GetParameters().Length == 0
orderby type.AssemblyQualifiedName
select type.AssemblyQualifiedName;
foreach (var name in qry) Console.WriteLine(name);
显示更多候选人:
System.Action, mscorlib...
System.CrossAppDomainDelegate, mscorlib...
System.IO.Pipes.PipeStreamImpersonationWorker, System.Core...
System.Linq.Expressions.Compiler.LambdaCompiler+WriteBack, System.Core...
System.Net.UnlockConnectionDelegate, System...
System.Runtime.Remoting.Contexts.CrossContextDelegate, mscorlib...
System.Threading.ThreadStart, mscorlib...
System.Windows.Forms.AxHost+AboutBoxDelegate, System.Windows.Forms...
System.Windows.Forms.MethodInvoker, System.Windows.Forms...
答案 1 :(得分:7)
有几个这样的代表,但我认为你正在寻找Action
。另一个选项是MethodInvoker
(在System.Windows.Forms中)。
答案 2 :(得分:5)
答案 3 :(得分:3)
我可能会以不同的方式向您解释您的问题,但是:
如果您正在考虑用于事件处理的委托,则约定是使用EventHandler。该代表不采用“否”参数,但它基本上没有信息。
答案 4 :(得分:2)
在.net 2.0中,MethodInvoker
代表是推荐的方式。它是最通用的。正如它的名字所暗示它调用一种方法。其他可能具有您描述的相同属性,但它们具有不同的名称,表明在特定区域中的其他用法或非常具体的用法。