2016-03-15 53 views
3

Iam不确定是否有人问同样的问题。但我无法找到任何与我的疑问相关的来源。代表们的需求是什么?

代表们在实时编程中需要什么?有很多步骤需要完成。

public delegate void SimpleDelegate(); 
    class TestDelegate 
    { 
     public static void MyFunc() 
     { 
      Console.WriteLine("I was called by delegate ..."); 
     } 
     public static void Main() 
     { 
      // Instantiation 
      SimpleDelegate simpleDelegate = new SimpleDelegate(MyFunc); 

      // Invocation 
      simpleDelegate(); 
     } 
    } 

如果再可用性是一个主要的原因(因为不需要创建实例)使用的委托,这可以通过其他方式也实现了。或者这是使用委托的唯一优势?我知道匿名方法比委托做的更好。但是,除了简化步骤外,它是否提供比代表更多的东西?以及当结构如下所示时我如何重用匿名方法。

List<int> values = new List<int>() { 1, 1, 1, 2, 3 }; 
List<int> res = values.FindAll(delegate(int element) 
    { 
     if (element > 10) 
     { 
     throw new ArgumentException("element"); 
     } 
     if (element == 8) 
     { 
     throw new ArgumentException("element"); 
     } 
     return element > 1; 
    }); 

我很困惑。请摆脱这一点。

+1

代表和匿名方法之间的区别与水果和苹果之间的区别。 –

+0

好的。但我想知道需要而不是差异。 –

+0

那么有不同类型的代表和lambda表达式是使代表更强大的实现的关键核心之一。我建议你检查一下lambda。 – Aizen

回答

1

代表为方法提供完全类型且安全的引用。现在使用通用事件处理程序Action,Func和lambda,我个人不记得上次我明确创建了一个委托。

它们仍然在引擎盖下的所有地方使用,但它们在日常编程中的历史非常悠久。代表存在于版本1中。兰姆达斯和其他选项很晚才出现。