如何在面试中解释委托?

4

我知道在Stackoverflow上有很多类似的问题,也知道什么是代理以及它的工作原理,但有时在面试中解释代理还是有些困难。你有什么建议可以更易懂地解释代理吗?


11
如果你真正理解委托,那么在面试中讲解它们就不会有问题。我建议你仔细学习。 - Oded
1
另外,以防万一,在面试时你应该记住Delegate和Event之间的区别 :) - angularrocks.com
5个回答

5
它实际上是强类型函数指针,是一种将任意代码作为方法参数传递的方式。

7
一个“强类型”的函数指针。 - Oded
+1 给你 @Oded,好的更正。 - Paul
一个非常重要的部分是它不仅仅是一个函数指针,而且它还可以包含一个绑定的第一个参数(通常是this)。否则它将无法与实例方法一起使用。 - CodesInChaos
4
函数指针是什么?这个解释除非你已经知道“函数指针”是什么,否则并没有解释任何东西。为什么一个C#程序员应该了解来自C的这个概念? - Eric Lippert
3
你真的能够传递“任意代码”吗? “class C{}”是完全有效的代码,同样有效的还有“[Obsolete]”和“using System;”,但这些都不会在委托中传递。 - Eric Lippert

2

委托是C#语言的一个元素,可以让您引用一个方法。


2

以下是我听过的代表描述:

  • 支持一级函数的语言和框架。
  • 单方法接口。
  • 类型安全的函数指针。
  • 表示具有明确定义契约的操作序列的对象。

如果需要更多详细信息,我会:

  • 区分System.Delegate、delegate-types、delegate-type variables和delegate-instances之间的差异;详细说明它们的声明、赋值、传递和调用。
  • 强调它们不可变的引用类型特性。
  • 讨论多路广播代理。
  • 列出框架中常见的代理类型,特别是Func<>和Action<>系列。
  • 将代理与方法组、匿名方法、lambda表达式和闭包联系起来。解释C#中delegate关键字的使用以及编译器为程序员提供的各种便利。
  • 讨论它们与线程、事件、表达式树和LINQ的关系。
  • 讨论:
    • 高阶函数 - 柯里化、组合等。
    • 如何使用反射使用委托。
    • 对委托的变异。

1

使用真实的生活类比怎么样?

http://www.wordreference.com/definition/delegate

将(任务或责任)委托给另一个人(在这种情况下是一个方法)。
在计算机领域,您可以用同样的方式解释它。当您将委托传递给方法时,您不知道该方法的实现方式,只是对该方法的引用,而委托负责执行它。

0

它是一个实体,封装了方法签名,并提供了一种类型安全、面向对象的机制,可以将函数视为对象处理,而无需使用函数指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接