我在.NET中有以下声明。我想知道这个声明到底是什么意思(第二行),尤其是
DoConsoleCancelEvent
delegate void InternalCancelHandler;
static readonly InternalCancelHandler cancel_handler =
new InternalCancelHandler (DoConsoleCancelEvent);
DoConsoleCancelEvent
声明为:
internal static void DoConsoleCancelEvent{...}
.NET 中使用的术语是什么?是 .NET 反射吗?
InternalCancelHandler
是 delegate
,这是保存对特定方法的引用的 C# 方式。第一行定义委托来引用具有 void
返回值且不带任何参数的方法(因为没有参数列表。)此定义:
delegate int InternalCancelHandler(bool boolParam);
定义一个委托,该委托将引用返回
int
并接受单个 bool
参数的方法。
下一行是该委托类型的静态只读字段的声明,该字段被初始化为引用
DoConsoleCancelEvent
方法的新实例。
有了该声明,您现在可以通过
调用委托来调用
DoConsoleCancelEvent
:
public static void CallDelegate()
{
// This line will actually call DoConsoleCancelEvent
MyType.cancel_handler();
}
请注意,委托类型末尾的
Handler
表明它是一个事件处理程序,这意味着您更有可能希望使用它来订阅事件:
public static void EventSub()
{
// This line makes it so that cancel_handler is called when
// SomeEvent is fired. Since cancel_handler actually refers
// to DoConsoleCancelEvent, it is *that* method that will
// actually be run
SomeType.SomeEvent += cancel_handler;
}
static
表示该字段与 Type
关联,而不是 Type
的特定实例
readonly
表示该字段只能在构建Type
期间分配
我相信您正在寻找的术语是代表。
在本例中,
InternalCancelHandler
是委托人。第一行代码创建一个指向您的 DoConsoleCancelEvent
方法的委托。然后,该委托将用于在稍后的某个时间点调用您的方法。
InternalCancelHandler
是delegate
。
根据 Mono 提交,这就是它所说的
DoConsoleCancelEvent
:
添加对 Windows 的 Win32 函数 SetConsoleCtrlHandler 的调用, 添加了 DoWindowsConsoleCancelEvent 包装器 当事件处理程序被执行时,DoConsoleCancelEvent 到 Ctrl-C 处理程序 添加,并在删除所有事件处理程序后删除处理程序。