gpt4 book ai didi

c# - 类内委托(delegate)的默认值

转载 作者:行者123 更新时间:2023-12-01 22:00:33 24 4
gpt4 key购买 nike

using System;

public delegate void Printer(string s);

class Program
{
public static void Main(string[] args)
{
Printer p = new Printer(delegate {});
p+= myPrint;
p("Hello");
Console.ReadKey(true);
}

public static void myPrint(string s)
{
System.Console.WriteLine(s);
}
}

似乎我必须使用空匿名函数初始化委托(delegate)才能稍后使用 += 。当我省略 new 子句时,p 变为 null 并且 += 不起作用,这使得感觉。

现在,当我有一个带有委托(delegate)实例的类时,我可以执行以下操作:

using System;

public delegate void Printer(string s);

class Program
{
public static void Main(string[] args)
{
A a = new A();
a.p += myPrint;
a.p("Hello");
Console.ReadKey(true);
}

public static void myPrint(string s)
{
System.Console.WriteLine(s);
}
}


class A {
public Printer p;
}

为什么允许这样做?委托(delegate)实例 p 是否有默认值?它不能为 null,因为那样我就无法使用 += 为其分配新的回调。我尝试使用关键字“委托(delegate)的默认值”搜索这个问题,但什么也没找到。另外,如果问题太基础,抱歉。

感谢您的帮助!

最佳答案

委托(delegate)是引用类型,因此默认值为null

但是,变量(与字段不同)默认情况下不会初始化:

Printer p;
p += myPrint; // doesn't work: uninitialized variable

您需要先初始化该变量,然后才能使用它:

Printer p = null;
p += myPrint;

Printer p;
p = null;
p += myPrint;
<小时/>

请注意,对于委托(delegate)(但不是事件!)

p += myPrint;

的简写
p = (Printer)Delegate.Combine(p, new Printer(myPrint));

关于c# - 类内委托(delegate)的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10710870/

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