您没有初始化事件,而是需要在Calling方法中检查null:
public void Calling()
{
if (Message != null)
Message("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)
事件已初始化。要的价值null。解决方法是先检查是否为空。规范方法如下所示:
public void Calling()
{
Func<string, string> handler = Message;
if (handler != null)
{
handler("Hello world!");
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,检查之前将事件值复制到本地。这样可以确保在检查事件null和调用事件之间不会同时更改事件。在许多程序中,这是不需要的(无需并发),您可以放心地直接检查事件本身。
如果您使用的是支持空条件运算符的C#版本(6.0或更高版本),则可以将上述内容很好地简化为:
public void Calling()
{
Message?.Invoke("Hello world!");
}
Run Code Online (Sandbox Code Playgroud)
编译器将为您生成引用的中间副本,对其进行检查null,并仅在该Invoke()方法为非null时调用该方法。
| 归档时间: |
|
| 查看次数: |
2175 次 |
| 最近记录: |