C# 委托(delegate) 基础示例:将方法作为参数传递
在 C# 开发中,委托(Delegate)是实现回调机制和方法间解耦的核心工具。本文将通过一个完整的控制台应用程序示例,演示如何定义委托、创建符合签名的方法,并将这些方法作为参数传递给其他方法进行执行。理解这一过程有助于掌握 C# 高阶函数及后续学习事件、Lambda 表达式的基础。
结果与目标
本文旨在展示如何在 C# 中实现“方法作为参数”的功能。具体目标包括:
- 定义一个返回字符串的委托类型
GetResultDelegate。 - 编写多个与该委托签名匹配的方法。
- 创建一个通用方法
Exec,接收委托并执行它,返回结果。 - 在主程序入口点演示如何通过委托调用不同方法。
准备条件
本示例基于标准 C# 控制台应用程序环境,无需额外依赖库。核心概念在于理解委托是一种类型安全的函数指针,用于封装具有特定签名(参数列表和返回类型)的方法。
第1步:定义委托类型
目的:确立一种可以引用“无输入参数且返回字符串”方法的类型。
操作:使用 delegate 关键字声明委托类型。
public delegate string GetResultDelegate();
此时,任何满足 string 方法名() 签名的方法都可以被赋值给 GetResultDelegate 类型的变量或参数。
第2步:编写匹配的源方法
目的:提供若干具体的业务逻辑方法,供委托调用。
操作:声明几个静态方法,确保其返回值类型为 string 且无参数。
public static string Get()
{
return "get";
}
public static string GetTest()
{
return "gettest";
}
public static string GetSet()
{
return "getSet";
}
第3步:构建通用的执行方法
目的:创建一个能够接收委托并执行它的容器方法。操作:方法参数类型为自定义的委托类型。
public static string Exec(GetResultDelegate getResult)
{
// 直接调用传入的委托
return getResult();
}
这里,getResult() 的调用等同于执行了外部传入的具体方法。
第4步:在主程序中调用委托
目的:验证委托机制能否正确传递并执行方法。
操作:在 Main 方法中,将方法名作为参数传递给 Exec 方法。
static void Main(string[] args)
{
// 将 GetSet 方法作为参数传递给 Exec
// C# 编译器会自动将方法转换为委托实例
Console.WriteLine(Exec(GetSet));
Console.ReadKey();
}
原理解析:C# vs JavaScript
C# 的委托机制在许多方面类似于 JavaScript 中的函数可作为参数传递的特性。然而,两者存在关键差异:
- JavaScript:函数是第一等公民,可以直接将函数名作为参数传递,语言原生支持。
- C#:需要通过“委托”这一中间类型进行转换。虽然语法上看起来像是直接传递方法名(如
Exec(GetSet)),但底层编译器自动完成了从方法到委托实例的装箱过程。这种设计保证了类型安全,防止将不匹配签名的方法传入。
完成判断
运行上述代码,控制台应输出:getSet。如果修改为 Exec(Get),则输出 get。这表明委托成功地将不同的方法逻辑封装并传入了执行流程中,实现了代码的复用和解耦。
简要总结
委托是 C# 中实现回调、事件和多播调用的基石。本例展示了最基础的单路委托用法:定义委托签名、编写对应方法、并通过通用函数执行委托。在实际项目中,委托常配合 Action<T>、Func<T, TResult> 等泛型委托简化代码,或结合 Lambda 表达式进一步缩短写法。
以上就是 C# 委托 delegate 基础示例与方法传参原理的详细内容,更多关于 C# 高级特性的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









