c# 学习笔记 - 委托(Delegate)

文章目录

    • [1. 委托](#1. 委托)
      • [1.1 委托概述](#1.1 委托概述)
      • [1.2 委托使用](#1.2 委托使用)
      • [1.3 委托的传播](#1.3 委托的传播)
    • [2. 匿名方法](#2. 匿名方法)
      • [2.1 匿名方法概述](#2.1 匿名方法概述)
      • [2.2 匿名方法](#2.2 匿名方法)

1. 委托

1.1 委托概述

**  委托简介**

  1. 委托就是对方法的引用,可以理解为例如整型变量的容器可以存储整形数据,委托就是某种方法的容器,可以用来存储这一类的方法。
csharp 复制代码
// 声明一个public访问修饰符的 (具有输入字符串类型 + 返回整形数据类型) 的委托
public delegate int MyDelegate(string s); // 委托的模板
  1. 委托分为两步,第一步需要声明这种委托(即定义此类委托是存储什么样子的方法的容器),当我们声明完成委托就相当于拥有了这个容器的模板,其第二步就是实例化委托,就是相当于我们往这个容器当中加入我们想要的方法完成其实例化。
csharp 复制代码
static int way1(string s){ // 定义符合委托模板的方法
    Console.WriteLine("way1: 传入的字符串为: " + s + ", 随后我即将返回整形数字1");
    return 1;
}

MyDelegate m1; // 通过委托模板实例化委托的容器
m1 = way1; // 往这个委托的容器当中放入方法
MyDelegate m1 = new MyDelegate(way1); // 等效于上述两个步骤之和

1.2 委托使用

csharp 复制代码
using System;

namespace DelegateAppl {
    class TestDelegate {
        // 声明一个public访问修饰符的 (具有输入字符串类型 + 返回整形数据类型) 的委托模板
        public delegate int MyDelegate(string s);

        static int way1(string s){
            Console.WriteLine("way1: 传入的字符串为: " + s + ", 随后我即将返回整形数字1");
            return 1;
        }

        static void Main(){
            MyDelegate m1; // 通过委托模板获取委托的容器
            m1 = way1; // 往这个委托的容器当中放入方法

            m1("hi.."); // way1: 传入的字符串为: hi.., 随后我即将返回整形数字1
        }
    }
}

1.3 委托的传播

  1. 简而言之就是委托不仅仅可以存储一个方法,它可以按顺序存储多个方法(注意添加的顺序就是委托内部方法的执行顺序)
csharp 复制代码
using System;

namespace DelegateAppl {
    class TestDelegate {
        public delegate int MyDelegate(string s);

        static int way1(string s){
            Console.WriteLine("way1: 传入的字符串为: " + s + ", 随后我即将返回整形数字1");
            return 1;
        }

        static int way2(string s) {
            Console.WriteLine("way2: 传入的字符串为: " + s + ", 随后我即将返回整形数字2");
            return 2;
        }

        static void Main(){
            MyDelegate m1; 
            m1 = way1;
            m1 += way2; // 或者可以先实例化一个新的MyDelegate m2 = way2; 再用 m1 += m2; 

            m1("hi.."); 
        }
    }
}
/*
way1: 传入的字符串为: hi.., 随后我即将返回整形数字1
way2: 传入的字符串为: hi.., 随后我即将返回整形数字2
 */

2. 匿名方法

2.1 匿名方法概述

**  简要说明**

  1. 之前我们写委托的时候需要首先声明一个方法,再把这个方法名字给到委托对象去使用.
  2. 匿名方法就是省去方法名字,直接将这个方法的内部操作直接给委托对象(建议当此方法只需要引用一次的时候去使用,因为这个方法是没有方法名)
csharp 复制代码
public delegate int MyDelegate(string s);
MyDelegate m1 = delegate (string s) { // 匿名方法(省去方法的名字)
    Console.WriteLine(s);
    return 3;
};

2.2 匿名方法

csharp 复制代码
using System;

namespace DelegateAppl {
    class TestDelegate {
        public delegate int MyDelegate(string s);

        static void Main(){
            MyDelegate m1 = delegate (string s) {
                Console.WriteLine(s);
                return 3;
            };

            int num = m1("hello world.....");
            Console.WriteLine(num);
        }
    }
}
/*
hello world.....
3
 */
相关推荐
小刘在重生~1 分钟前
Django 全套入门笔记|安装、项目创建、ORM、Form、中间件、登录认证
笔记·中间件·django
是隼人11 分钟前
buuctf-pwn wdb_2018_3rd_soEasy(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
mldong8 小时前
C# 开发者也有自己的轻量工作流引擎了:NuGet 装包,5 分钟跑通一条审批流
后端·c#·.net
mykj15518 小时前
英语单词APP解锁学习新方式,智能高效背单词
学习·英语单词app
知识分享小能手9 小时前
深度学习学习教程,从入门到精通,深度学习中的正则化 — 完整知识点与代码示例(7)
人工智能·深度学习·学习
~kiss~10 小时前
Agent 的 未来吗?String: An Agentic OS Where Every App Is a Markdown File
学习
HugoStudio_SWAN11 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
samble11 小时前
从零搭建工业控制系统(二十二):线程安全与并发控制
c#·wpf·并发·mvvm·线程安全·工业控制
猎头南楼12 小时前
VLA 模型落地端侧:从架构选型到量化部署的工程实践笔记
笔记·架构·大模型
Capricorn198813 小时前
日志级幻觉排障:GPT-6 Astra 迈入 AGI 时代,知芽 Notebook Skill 如何以引用校验与零命中诚实弃权解决长文失忆
论文阅读·人工智能·笔记·gpt·agi