21.10實現例子
本節以標准C#的構件形式描述匿名方法的可能實現。在這裡描述的實現基於Microsoft C#編譯器所采用的相同原則,但它決不是強制性的或唯一可能的實現。
本節的後面部分給出了幾個示例代碼,它包含了具有不同特性的匿名方法。對於每個例子,我們將提供使用唯一標准C#構件的代碼的對應轉換。在這些例子中,標識符D假定表示如下委托類型。
public delegate void D();
匿名方法的最簡形式就是沒有捕獲外部變量的那個。
class Test
{
static void F() {
D d = delegate { Console.WriteLine("test"); };
}
}
這段代碼可被轉換到一個引用編譯器生成的靜態方法的委托實例,而匿名方法的代碼將會放入到該靜態方法中。、
class Test
{
static void F() {
D d = new D(__Method1);
}
static void __Method1() {
Console.WriteLine("test");
}
}
在下面的示例中,匿名方法引用this的實例成員。
class Test
{
int x;
void F() {
D d = delegate { Console.WriteLine(x); };
}
}
this可以被轉換到由編譯器生成的包含匿名方法代碼的實例方法。
class Test
{
int x;
void F() {
D d = new D(__Method1);
}
void __Method1() {
Console.WriteLine(x);
}
}