Делегат по умолчанию в C # - PullRequest
11 голосов
/ 01 ноября 2010

Как называется делегат по умолчанию в C #, который не принимает параметров и возвращает void?Я помню, что был такой делегат, но я не помню его имени.

Ответы [ 5 ]

12 голосов
/ 01 ноября 2010

До .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...
7 голосов
/ 01 ноября 2010

Есть несколько таких delgates, но я думаю, что вы ищете Action.Еще одна опция - MethodInvoker (в System.Windows.Forms).

5 голосов
/ 01 ноября 2010
3 голосов
/ 01 ноября 2010

Возможно, я по-разному истолковываю ваш вопрос, но:

Если вы думаете о делегате, который будет использоваться для обработки событий, принято использовать EventHandler .Этот делегат не принимает параметры «нет», но он по существу не содержит информации.

2 голосов
/ 01 ноября 2010

В .net 2.0 делегат MethodInvoker рекомендуется.Это самый общий.Как следует из названия, он вызывает метод.Другие могут иметь те же свойства, которые вы описали, но они имеют другое имя, которое предполагает другое использование или очень специфическое использование в определенных областях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...