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

时间:2011-08-18 14:09:08

标签: c# .net compiler-construction mono

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

delegate void InternalCancelHandler;

static readonly InternalCancelHandler cancel_handler = 
    new InternalCancelHandler (DoConsoleCancelEvent);

DoConsoleCancelEvent声明为:

internal static void DoConsoleCancelEvent{...}

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

3 个答案:

答案 0 :(得分:7)

InternalCancelHandlerdelegate,它是保存对特定方法的引用的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)

InternalCancelHandlerdelegate

根据Mono commit,这是关于DoConsoleCancelEvent的说法:

  

添加对Windows的Win32函数SetConsoleCtrlHandler的调用,   它为DoWindowsConsoleCancelEvent包装添加了   事件处理程序时,DoConsoleCancelEvent到Ctrl-C处理程序   添加,并在删除所有事件处理程序后删除处理程序。