Подтвердить что ты не робот

Делегат по умолчанию в С#

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 4

Я могу интерпретировать ваш вопрос по-разному для всех остальных, но:

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

Ответ 5

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