Каково имя делегата по умолчанию в С#, который не принимает никаких параметров и возвращает void? Я помню, что там был такой делегат, но я не помню его имени.
Делегат по умолчанию в С#
Ответ 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).
Ответ 3
Вероятно, вы ищете "Action".
Некоторые связанные чтения:
Ответ 4
Я могу интерпретировать ваш вопрос по-разному для всех остальных, но:
Если вы думаете о том, что делегат должен использовать для обработки событий, соглашение должно использовать EventHandler. Этот делегат не принимает параметры "нет", но практически не имеет информации.
Ответ 5
В .net 2.0 делегат MethodInvoker
является рекомендуемым способом. Это самый общий. Как следует из названия, он вызывает метод. Другие могут иметь те же свойства, которые вы описали, но они имеют другое имя, которые предполагают другие применения или очень специфические применения в определенных областях.