开发者

Default delegate in C#

Wha开发者_JS百科t is the name of the default delegate in C# which takes no parameters and returns void? I remember there existed such a delegate but I don't remember its name.


Prior to .NET 3.5, it was fairly common to declare your own. Now, Action is a good candidate, but ThreadStart was commonly used (fairly confusingly), or MethodInvoker if you were already referencing winforms.

A quick test (note, running in .NET 4.0, using just some libraries - so not exhaustive):

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

shows some more candidates:

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...


There are several such delgates, but I think you are looking for Action. One other option is MethodInvoker (in System.Windows.Forms).


You are probably looking for "Action".

Some related reading:

  • Standard delegates in C#
  • Action Delegate
  • Uses of Action delegate in C#


I may be interpreting your question differently to everyone else, but:

If you are thinking of the delegate to use for event handling, convention is to use EventHandler. This delegate doesn't take 'no' parameters, but it is essentially information-less.


In .net 2.0 the MethodInvoker delegate is the recomended way. It is the most generic. As it's name suggest it invokes a method. Others might have the same properties you described but they have different name that suggest other usages or very specific usages in specific areas.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜