【问题标题】:What is the difference between Static method call vs delegate method call? [duplicate]静态方法调用与委托方法调用有什么区别? [复制]
【发布时间】:2012-08-07 05:02:44
【问题描述】:

谁能说出静态/对象方法调用与委托方法调用之间的区别,这里是我提供的示例。

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    在您的示例中.. 它们的用法没有区别。然而,在架构上,它们完全不同。委托是对方法的引用。静态方法是.. 一种方法。

    代表可以更改他们引用的方法。但是,方法就是……方法。

    【讨论】:

    • 如果您发现时间与实际使用情况分享差异
    【解决方案2】:

    委托的用处还在于它们是类型,例如可以用作方法的参数。例如,如果您声明

    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,您就会明白,拥有一个表示特定签名和返回类型的方法(或多个方法)的类型会很有用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 2011-04-23
      • 2011-07-23
      • 2011-01-27
      • 1970-01-01
      相关资源
      最近更新 更多