gpt4 book ai didi

c# - 为什么我不能注册到作为参数传递的事件?

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:57 24 4
gpt4 key购买 nike

这是我的代码:

using System.IO;
using System;

public class MyClass1{

event Action _myEvent;

public MyClass1(){
var m = new MyClass2(_myEvent);
_myEvent();
}

}

public class MyClass2{
public MyClass2(Action _event){
_event += MyFunction;
}

void MyFunction(){
Console.WriteLine("Hi");
}
}

class Program
{

static void Main()
{
var m = new MyClass1();
}
}

似乎 MyClass2 没有注册到传递的参数 _myEvent。即使应订阅 MyClass2,调用 _myEvent 也会导致 NullReferenceException。如果我公开 _myEvent 并让 MyClass2 直接注册到它而不使用传递给它的事件参数,它可以正常工作。这是为什么?

最佳答案

您将收到 NullReferenceException,因为 _myEventMyClass2 构造函数返回后为 null。

MyClass2 的构造函数中,当您执行 _event += MyFunction 时,这实际上是以下内容的简写:

_event = (Action)Delegate.Combine(_event, (Action)MyFunction);

所以现在在构造函数中你有一个全新的引用,除非你将 ref 关键字添加到参数中,否则它不会被传回。

关于c# - 为什么我不能注册到作为参数传递的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31497715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com