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

问题描述 投票:0回答:3

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

DoConsoleCancelEvent

delegate void InternalCancelHandler;

static readonly InternalCancelHandler cancel_handler = 
    new InternalCancelHandler (DoConsoleCancelEvent);

DoConsoleCancelEvent
声明为:

internal static void DoConsoleCancelEvent{...}

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

c# .net mono
3个回答
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

期间分配

0
投票

我相信您正在寻找的术语是代表

在本例中,

InternalCancelHandler
是委托人。第一行代码创建一个指向您的
DoConsoleCancelEvent
方法的委托。然后,该委托将用于在稍后的某个时间点调用您的方法。


0
投票

InternalCancelHandler
delegate

根据 Mono 提交,这就是它所说的

DoConsoleCancelEvent

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

© www.soinside.com 2019 - 2024. All rights reserved.