我在.NET中有以下声明。我想知道这个声明究竟是什么意思(第二行),尤其是DoConsoleCancelEvent
delegate void InternalCancelHandler;
static readonly InternalCancelHandler cancel_handler =
new InternalCancelHandler (DoConsoleCancelEvent);
DoConsoleCancelEvent
声明为:
internal static void DoConsoleCancelEvent{...}
.NET中使用的术语是什么?是.NET反射吗?
答案 0 :(得分:7)
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
答案 1 :(得分:0)
我相信你要找的词是Delegate。
在这种情况下,InternalCancelHandler
是委托人。第一行代码创建一个指向DoConsoleCancelEvent
方法的委托。然后,代表将用于在稍后的时间调用您的方法。
答案 2 :(得分:0)
InternalCancelHandler
是delegate
。
根据Mono commit,这是关于DoConsoleCancelEvent
的说法:
添加对Windows的Win32函数SetConsoleCtrlHandler的调用, 它为DoWindowsConsoleCancelEvent包装添加了 事件处理程序时,DoConsoleCancelEvent到Ctrl-C处理程序 添加,并在删除所有事件处理程序后删除处理程序。