C#.net中的这个声明是什么意思?

fx.*_*fx. 2 .net c# compiler-construction mono

我在.NET中有以下声明.我想知道这个声明究竟是什么意思(第二行),特别是DoConsoleCancelEvent

delegate void InternalCancelHandler;

static readonly InternalCancelHandler cancel_handler = 
    new InternalCancelHandler (DoConsoleCancelEvent);
Run Code Online (Sandbox Code Playgroud)

DoConsoleCancelEvent声明为:

internal static void DoConsoleCancelEvent{...}
Run Code Online (Sandbox Code Playgroud)

.NET中使用的术语是什么?是.NET反射吗?

dle*_*lev 7

InternalCancelHandler是一种delegateC#方式,用于保存对特定方法的引用.第一行定义委托引用具有void返回的方法,并且不带参数(因为没有参数列表.)此定义:

delegate int InternalCancelHandler(bool boolParam);
Run Code Online (Sandbox Code Playgroud)

定义一个委托,该委托将引用一个返回int并接受单个bool参数的方法.

下一行是该委托类型的静态只读字段的声明,该字段初始化为引用该DoConsoleCancelEvent方法的新实例.

使用该声明,您现在可以DoConsoleCancelEvent通过调用委托调用:

public static void CallDelegate()
{
    // This line will actually call DoConsoleCancelEvent
    MyType.cancel_handler();
}
Run Code Online (Sandbox Code Playgroud)

请注意,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;
}
Run Code Online (Sandbox Code Playgroud)

static表示该字段与该字段相关联Type,而不是与该字段的特定实例相关联Type

readonly 表示该字段只能在构建期间分配 Type