2
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"
來搜索這個問題,但什麼都沒發現。另外,如果問題太簡單,對不起。
感謝您的幫助!
所以簡寫,它畢竟空。該死的。 – Kalevi
您也可以使用'p = myPrint'。 –
你也可以使用'p = p + myPrint;'或'p = myPrint + p;',即使'p'是一個(類似於字段的)事件,這也可以工作(而不是線程安全的)由相同的類/結構。當'p'是由這個類/結構定義的事件時,'+ ='的語義在C#4(2010)中進行了更改。 –