delegate可以用作类类型

时间:2014-04-01 19:14:50

标签: c# delegates anonymous-function

我在c#中有委托的示例代码。我想知道可以委托作为类使用,如下例所示:

using System;

// This delegate returns int and takes an int argument.
delegate int CountIt(int end);

class VarCapture {

    static CountIt Counter() {
        int sum = 0;
        // Here, a summation of the count is stored
        // in the captured variable sum.
        CountIt ctObj = delegate (int end) {
            for(int i=0; i <= end; i++) {
                Console.WriteLine(i);
                sum += i;
            }
            return sum;
        };
        return ctObj;
    }

    static void Main() {
        // Get a counter.
        CountIt count = Counter();
        int result;
        result = count(3);
        Console.WriteLine("Summation of 3 is " + result);
        Console.WriteLine();
        result = count(5);
        Console.WriteLine("Summation of 5 is " + result);
    }
} 

1 个答案:

答案 0 :(得分:3)

是的,委托类型是类 - 每个具体的委托类型都继承自MulticastDelegate,您可以传递委托引用,就像您可以传递任何其他类型的引用一样。

CLR,框架和语言可以通过各种方式对它们进行特殊处理,但这些方法除了普通类之外还有额外的功能。

在这种特殊情况下,您使用anonymous method创建委托实例。您可能希望查看lambda expressions,它们通常会替换在惯用C#中使用匿名方法,除非在极少数情况下。