c#委托详解 缺乏、安全感 2024-03-24 13:07 9阅读 0赞 ### 简介 ### 委托是一种能够将方法作为参数传递、存储方法并且调用方法的类型,它可以让我们写出更加灵活和可扩展的代码。委托通常用于回调 (Callback) 机制,比如在事件处理、异步编程、LINQ 查询等场景中常常会使用委托。它可以将方法作为参数传递给其他方法,从而在需要的时候执行该方法。 ## 代码演示 ## ### hello world ### 快速用委托写一个hello world,定义了一个名为 `DelegateMethod` 的委托类型,它有一个无参数的 `Invoke` 方法。然后在 `Main` 方法中,我们创建了一个名为 `delegateMethod` 的委托实例,并调用它的 `Invoke` 方法。这样就可以通过委托来调用其他方法,并在调用时传递参数。 public delegate void DelegateMethod(); public static void Main(string[] args) { DelegateMethod delegateMethod = new DelegateMethod(); delegateMethod(); } static void DelegateMethod() { Console.WriteLine("Hello, world!"); } ### 委托多播 ### public delegate void Teacher(); void Language() { Console.WriteLine("我是语文课代表"); } void English() { Console.WriteLine("我是英语课代表"); } public static void Main(string[] args) { Teacher teacher = new Teacher(Language); teacher += English; teacher.Invoke(); } ### 匿名方法 ### 延用上面的Teacher方法 public static void Main(string[] args) { Teacher teacher = delegate { Console.WriteLine("使用匿名方法"); }; teacher.Invoke(); } ![f1d314432d2a4ffc96bcfae256e738e9.png][] ### lambda表达式 ### public static void Main(string[] args) { // Teacher teacher = (如果有参数,把参数写在括号内) => Teacher teacher = () => { Console.WriteLine("使用匿名方法"); }; teacher.Invoke(); } ### 内置委托Action ### 内置委托Action是一种匿名委托类型,它可以接收一个参数并在执行时传递该参数。它通常用于执行简短的操作,例如打开一个文件或发送一条消息,等等。 Action 是一个内置类型,它定义了一个无返回值的委托类型,它可以接受一个参数。该委托类型的参数可以是任何类型,包括基本数据类型、引用类型和自定义类型。 Action action = () => { Console.WriteLine("一个无参无返回值的委托"); }; action.Invoke(); ![79ccd2215d9b43bc90c8c3a9438fb097.png][] Action<int> actionInt = (i) => { Console.WriteLine($"带参数内置委托,参数为{i}"); }; actionInt.Invoke(123); ![6b1783030fe942d3bd0a8514b2d00e84.png][] ### 内置委托Func ### func是C\#6.0中引入的一种新的函数类型,而上面的Action是C\#内置的匿名委托类型。 并且Func与Action的返回值不同,Action 类型必须返回 void,func类型的返回值可以是任何类型 如下: // 定义一个返回字符串的 func 类型函数 func<string>(int x) => x.ToString(); // 定义一个返回布尔值的 func 类型函数 func<bool>(int x) => x > 0; // 定义一个返回自定义类型的 func 类型函数 func<MyType>(int x) => new MyType { Value = x }; 要注意的是,如果定义的 func 类型函数返回值为自定义类型,则该自定义类型必须实现 IConvertible 接口。 演示: //无参有返回值 Func<int> func = () => { return 10; }; int f = func.Invoke(); Console.WriteLine(f); //有参有返回值 Func<int, int, string> funcMax = (x, y) => (x + y).ToString(); Console.WriteLine(funcMax.Invoke(2,3)); ![7f05fa2891754e27b3ca9fec7642e5f9.png][] ### 事件 ### 事件是一个特殊类型的委托,它包含了一个事件处理程序列表。事件处理程序在事件发生时被调用,可以在事件处理程序中处理事件和事件数据。 委托和事件实际上是相互关联的。事件本身就是一个委托,它包含了一个事件处理程序列表。当事件触发时,事件处理程序列表中的处理程序会被调用。每个事件处理程序都是一个委托,它实现了事件处理的逻辑。 //事件是一个委托,并且是一个特殊的密封类 public event Action Event1; [Test] public void TsetEvent() { //只能通过+=和-=来订阅与取消订阅方法 Event1 += () => { Console.WriteLine("触发事件1"); }; Event1 += () => { Console.WriteLine("触发事件2"); }; Event1 += () => { Console.WriteLine("触发事件3"); }; Event1.Invoke(); } [f1d314432d2a4ffc96bcfae256e738e9.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/24/2bb0030bb80e43e4973a37e3539cc867.png [79ccd2215d9b43bc90c8c3a9438fb097.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/24/070e1a82ad9d448eb31d2c6c4d1b2c67.png [6b1783030fe942d3bd0a8514b2d00e84.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/24/cb9ad37a83ee47759b572496fc959466.png [7f05fa2891754e27b3ca9fec7642e5f9.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/24/9001570724fd4529ac780d948bc2b0c6.png
相关 c#委托详解 简介 委托是一种能够将方法作为参数传递、存储方法并且调用方法的类型,它可以让我们写出更加灵活和可扩展的代码。委托通常用于回调 (Callback) 机制,比如在事件处理、 缺乏、安全感/ 2024年03月24日 13:07/ 0 赞/ 10 阅读
相关 C#委托 一、什么是委托 委托是一种类型,就跟int,double,struct,string,class一样。它定义了一个函数的类型。现在,我们有一个方法,我们希望它的参数是某个 川长思鸟来/ 2024年02月17日 22:49/ 0 赞/ 101 阅读
相关 C#——委托 C\——委托 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。 你可以通过委托 冷不防/ 2023年01月03日 04:22/ 0 赞/ 278 阅读
相关 C#委托 委托: 委托定义了方法的类型,使得方法可以作为另一个方法的参数来进行传递,这样可以在程序中避免使用大量的判断语句,同时使程序具有更好的扩展性。 可以将多个方法绑定到同一个委 矫情吗;*/ 2022年09月17日 07:28/ 0 赞/ 226 阅读
相关 c#委托 首先创建个控制台应用程序在Program下创建一个无参数无返回值的静态方法,可以输出一句话 static void Text() { Cons 迈不过友情╰/ 2022年04月16日 06:15/ 0 赞/ 295 阅读
相关 C# 委托 一、什么是委托? 初次理解这么抽象的概念确实有点挺难的,如果学过C语言,可能知道C语言里可以把一个方法当做参数来传递,委托大概类似也是这样一个原理。 想象一下,在一个 ゞ 浴缸里的玫瑰/ 2022年04月08日 12:15/ 0 赞/ 315 阅读
相关 C# 委托 什么是委托? 委托和事件这两个概念是完全配合的。委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个引 野性酷女/ 2022年02月16日 13:51/ 0 赞/ 315 阅读
相关 C# 委托 委托 作用:将多个参数相同的方法,进行委托统一调用,将参数和调用方法传递给委托,由委托调用。 好处:可以将多个方法内相同的部分提取出来,根据参数和方法参数,调用需要的 ゝ一世哀愁。/ 2021年10月14日 02:00/ 0 赞/ 418 阅读
相关 C# 委托 什么是委托? 委托是寻址方法的.NET版本,使用委托可以将方法作为参数进行传递。委托是一种特殊类型的对象,其特殊之处在于委托中包含的是一个或多个方法的地址,而不是数据。委 谁践踏了优雅/ 2021年06月24日 16:10/ 0 赞/ 536 阅读
还没有评论,来说两句吧...