gpt4 book ai didi

c# - Delegate += operator 类作用域与本地作用域

转载 作者:行者123 更新时间:2023-11-30 14:48:23 26 4
gpt4 key购买 nike

我有一个委托(delegate)

delegate void Del(int a, int b);

为什么这段代码有效:

class MyClass
{
private Del invoker;

public void SetInvoker(Del del)
{
invoker += del; //everything is ok
}
}

而这段代码没有?

 public class Program
{
static void Main(string[] args)
{
Del invoker += new Del(Display); //error! Invalid expression term '+='

}

static void Display(int a, int b)
{

}
}

这很奇怪,因为在这两种情况下 invoker 在初始化之前(在使用 += 运算符之前)都是 null

最佳答案

这一行

Del invoker += new Del(Display);

等于

Del invoker;
invoker = invoker + new Del(Display);

调用程序不能在 + 运算符中使用,因为它未初始化。

所以

在 Main 方法中,您的 invoker 是一个局部变量,每个局部变量都必须在使用前进行初始化。 invoker 的值不是null,但未初始化。如果您没有为变量分配任何值,它会抛出一个错误,它没有被初始化。因此,您需要明确地为其分配 null

public class Program
{
static void Main(string[] args)
{
Del invoker = null;
invoker += new Del(Display); //error!
}

static void Display(int a, int b)
{

}
}

当您使用 class 版本时,class'es constructor 将使用默认值初始化 first 的字段。所以在对象创建之后,它的所有字段都有默认值,因此您可以对它们使用 +=

关于c# - Delegate += operator 类作用域与本地作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41869141/

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