在类中代表默认值(Default value of delegates inside classes

2019-09-17 10:22发布

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);
    }
}

看来,如果我必须初始化一个委托一个空匿名函数可以使用+=以后。 当我省略了new条款, p获取要null+=不起作用,这是有道理的。

现在,当我有一类与委托实例,我可以做到以下几点:

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;
}

为什么这可以吗? 是否有委托实例的默认值p ? 它不可能是null ,因为那时我不就能够分配它采用了全新的回调+= 。 我试图用关键字搜索这个问题"default value for delegates"并没有发现。 另外,对不起,如果这个问题如果太基本。

谢谢你的帮助!

Answer 1:

代表是引用类型,所以默认值是null

然而,变量(不像字段)未初始化默认情况下:

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

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

Printer p = null;
p += myPrint;

要么

Printer p;
p = null;
p += myPrint;

请注意,对于代表(但不是事件!)

p += myPrint;

简写为

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


文章来源: Default value of delegates inside classes
标签: c# delegates