C#面试题更新 2026-08-03

请解释 C# 中泛型委托的概念,并描述其定义及使用方法。

考察说明

考查对 C# 泛型委托概念、定义方式及实际应用的掌握程度。

回答思路

  1. 【回答框架 1】泛型委托是允许定义时使用类型参数的委托类型,声明形式为 delegate T MyDelegate<T>(T arg);。类型参数在使用时指定具体类型,从而提供类型安全且可复用的委托定义。
  2. 【回答框架 2】定义泛型委托需在委托声明中引入类型参数,并可在参数列表和返回类型中使用。例如 delegate TResult Func<T, TResult>(T arg); 表示接受一个 T 类型参数并返回 TResult 类型的委托。
  3. 【回答框架 3】使用泛型委托时,需实例化并指定具体类型,如 Func<int, int> f = x => x * 2;,随后可像普通委托一样调用。泛型委托可与 Lambda 表达式、匿名方法或具体方法绑定。
  4. 【回答框架 4】C# 内置了多种泛型委托,如 Func<in T, out TResult> 系列用于有返回值的方法,Action<in T> 系列用于无返回值的方法,Predicate<T> 用于返回布尔值的判断。这些内置类型简化了常见场景的委托使用。
  5. 【回答框架 5】在事件和回调中,泛型委托能提升代码的灵活性与可读性,避免为每种参数类型单独定义委托。使用时需注意泛型委托的类型参数在编译期确定,确保类型安全,避免装箱与拆箱开销。
  6. 【关键点 1】泛型委托使用类型参数,声明时未指定具体类型,使用时确定。
  7. 【关键点 2】常用内置泛型委托有 Func、Action 和 Predicate。
  8. 【关键点 3】泛型委托可与 Lambda 表达式或方法组绑定,调用方式与普通委托一致。
  9. 【关键点 4】泛型委托提供类型安全,减少重复定义,适用于通用回调场景。
  10. 【易错点 1】混淆 Func 与 Action,两者区别在于是否有返回值,但容易记反。
  11. 【易错点 2】泛型委托的类型参数数量与顺序需与绑定方法匹配,否则编译报错。
  12. 【易错点 3】在事件中使用泛型委托时,需注意标准的事件模式(如 EventHandler<T>),避免直接暴露委托字段。