静态方法调用与委托方法调用有什么区别?

时间:2012-08-07 05:02:44

标签: c#

任何人都可以说静态/对象方法调用与委托方法之间的区别在这里调用我的结尾提供的示例。

class Program
{
    private delegate void TestDeleg1(string input1);
    static void Main(string[] args)
    {
        // Using delege & Lambda expression
        TestDeleg1 testDeleg1 = input => { var test = "Hai " + input; Console.WriteLine(test); };
        testDeleg1("Microsoft");

        // Using simple static method invoke
        TestImplementation("Microsoft");
        Console.ReadLine();
    }

    public static void TestImplementation(string input1)
    {
        var test = "Hai " + input1;
        Console.WriteLine(test);
    }
}

因为我没有找到委托方法调用的任何实时用法。

谢谢, S.Venkatesh

2 个答案:

答案 0 :(得分:4)

在你的例子中......它们的用法没有区别。然而,在建筑方面,它们是完全不同的。委托是对方法的引用。静态方法是一种方法。

代表可以改变他们引用的方法..但是,方法只是......方法。

答案 1 :(得分:1)

委托的用处还来自于它们是 types 这一事实,可用作例如方法的参数。例如,如果您声明

internal delegate bool PredicateOnInt32(int x);

然后PredicateOnInt32是一种引用类型,您可以将它用作方法中的参数,例如

internal int GetFirstNumberWhere(PredicateOnInt32 pred)
{
  foreach (int num in this.numbers)
  {
    if (pred(num))
      return num;
  }
  throw new InvalidOperationException("No number satisfies the specified prediacte");
}

当然,这只是一个例子。但是想想LINQ,你就会明白,拥有一个代表特定签名和返回类型的方法(或几种方法)的类型会很有用。

委托的另一个用途是在 events 中,其中在场景后面使用委托实例来保存事件“发生”时要调用的方法集合。例如,单击按钮时。然后,不同的“订阅者”可以通过事件的添加访问者将自己的方法添加到委托中。