什么是委托?

C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。

委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。

委托的定义语法?

声明委托

修饰符 delegate 返回值 委托名(参数类型 参数名称)
public delegate int MyDelegate (string s);

实例化委托

public delegate void printString(string s);
...
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);

程序题

设计一个方法, 用于向某人问好,并且要支持各个国家的人使用。具有可扩展性。要求使用委托技术。

当我们想实现多语言时,你也许会考虑这样:

        public void ChineseGreeting(string name)
{
MessageBox.Show("早上好," + name);
}
public void EnglishGreeting(string name)
{
MessageBox.Show("Good Morning," + name);
}

当我想用中文问好的时候使用ChineseGreeting方法,当我想用英文问好的时候,EnglishGreeting用方法

按钮点击事件

 private void button1_Click(object sender, EventArgs e)
{
ChineseGreeting("张三");
EnglishGreeting("Alice");
}

但是,如果我需要用更多的语言问好呢?

也许你会考虑使用枚举

枚举

#region
//枚举
public enum Language
{
Chinese, English, Japanese,
}
#endregion
public void GreetPeople(string name, Language lang)
{
switch (lang)
{
case Language.Chinese: ChineseGreeting(name); break;
case Language.English: EnglishGreeting(name); break;
case Language.Japanese: MessageBox.Show("おはよう," + name); break;
default: MessageBox.Show("早上好," + name); break; }
}

点击事件

 private void button1_Click(object sender, EventArgs e)
{ GreetPeople("张三", Language.Chinese);
GreetPeople("Alice", Language.English);
GreetPeople("ひなた", Language.Japanese); }

委托

        #region
//委托
public delegate void GreetingDelegate(string name);
//使用委托
public void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
#endregion

好,现在是点击事件

 private void button1_Click(object sender, EventArgs e)
{
//使用委托的方法1
GreetPeople("Lucy", EnglishGreeting);
//使用委托的方法2
//设置委托 g1
GreetingDelegate g1;
//g1对应的方法
g1 = ChineseGreeting;
//使用委托
GreetPeople("李四", g1);
}

【C#】【平时作业】习题-10-委托的更多相关文章

  1. 成员函数指针与高效C++委托 (delegate)

    下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...

  2. C#学习(2):委托

    1.疑问: 1.委托是什么? 2.为什么需要委托? 3.委托能用来做什么? 4.如何自定义委托? 5..NET默认的委托类型有哪几种? 6.怎样使用委托? 7.多播委托是什么? 8什么是泛型委托? 9 ...

  3. C#面试:委托

    面试常见题: 1.委托是什么?★☆ 2.为什么需要委托?★☆ 3.委托能用来做什么?★☆ 4.如何自定义委托★☆ 5..NET默认的委托类型有哪几种?★☆ 6.怎样使用委托?★★★ 7.多播委托是什么 ...

  4. 【Unity|C#】基础篇(8)——委托(Delegate)/ 事件(Event)

    [学习资料] <C#图解教程>(第13~14章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.bai ...

  5. 【C#图解教程学习笔记】第13章 委托

    13.1 什么是委托 委托是持有一个或多个方法的对象,可将一个方法传递到另一个方法. 委托是用户自定义的引用类型. 13.2 委托概述 类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列 ...

  6. Ansible 小手册系列 十七(特性模块)

    异步操作和轮询 --- # Requires ansible 1.8+ - name: 'YUM - fire and forget task' yum: name=docker-io state=i ...

  7. 彻底弄懂C#中delegate、event、EventHandler、Action、Func的使用和区别

    [目录] 1 委托 2 事件-概念的引出 3 事件-关于异常 4 事件-关于异步 5 委托-Func与Action 1 委托 在.NET中定义"委托"需要用到delegate关键字 ...

  8. 《精通C#》委托与事件(10章)

    委托可用来解耦以及状态变化的实时通知,以及其他的一些作用,但是经验所限,目前还未遇见.网上的大多数例子都是类似于,使用委托,然后用console返回方法的返回值,有时候会在想,委托的通知如果是这样的话 ...

  9. C#高级编程笔记 (6至10章节)运算符/委托/字符/正则/集合

    数学的复习,4^-2即是1/4/4的意思, 4^2是1*2*2的意思,而10^-2为0.01! 7.2运算符 符号 说明 例   ++ 操作数加1 int i=3; j=i++; 运算后i的值为4,j ...

  10. C#学习笔记(10)——再谈委托,不同国家问候的例子

    说明(2017-6-14 09:08:38): 1. 首先是一个简单的委托 (1)命名空间下定义一个委托MyDel: public delegate void MyDel(string name); ...

随机推荐

  1. 聊聊 HTAP 的前世今生

    随着现代社会大型实时分析应用的逐渐流行,关系型数据库已经难以处理高并发的事务请求.商业层面上,当全球进入数字化时代,数字化技术渗透到各行各业,同时产生了海量数据,数据的存储和应用是企业决策的重要依据之 ...

  2. url 统一资源定位符的组成

    协议 protocol :http 或者 https = http + ssl  或者 file 文件(本地): 域名 host 或 ip 地址: 端口 port 省略默认 80  : 路径 path ...

  3. kotlin函数和Lambda表达式——>高阶函数与lambda表达式

    1.高阶函数 高阶函数是将函数用作参数或返回值的函数. 一个不错的示例是集合的函数式⻛格的 fold,它接受一个初始累积值与一个接合函数,并通过将当前 累积值与每个集合元素连续接合起来代入累积值来构建 ...

  4. C++版的Mc

    非常垃圾的c++版Mc. #include<bits/stdc++.h> #include<windows.h> #include<conio.h> using n ...

  5. Java高并发,创建线程的新方式Callable接口

    我们已经知道创建线程的方式有1.继承thread类.2.实现Runnable接口 接下来讲创建线程的新方式Callable接口,首先对比一下Runnable接口和Callable接口的区别: 首先创建 ...

  6. 如何阅读 CPU 电路图(以 6502 为例)

    开篇 你是否曾对 CPU 的工作原理充满好奇,以及简单的晶体管又是如何组成逻辑门,进而构建出复杂的逻辑电路实现?本文将以知名的 6502 CPU 的电路图为例,介绍如何阅读 CPU 电路图,并向你演示 ...

  7. Windows 多次制作母盘,备份文件变大的问题

    公司产品基于Win11 23H2镜像版本制作母盘,我们发现随着版本迭代,基于上一版本母盘生成新母盘备份,母盘文件会越来越大. 此处说明下镜像与母盘文件的区别, 1. 镜像是指操作系统的压缩文件,常见格 ...

  8. 为 .NET Conf 2024 做好准备之本地社区活动 .NET Conf China 2024 启动

    .NET Conf 2024 是一个面向.NET生态系统社区的大型活动,将于2024年11月12日至14日举行.该活动将通过YouTube和Twitch进行现场直播,并在dotnetconf.net网 ...

  9. [OtterCTF 2018]-内存取证-WP

    [OtterCTF 2018] WP [OtterCTF 2018] What the password? 题目描述: you got a sample of rick's PC's memory. ...

  10. Mybatis中foreach的使用

    首先我们要明白的是foreach的本质就是把数据库能执行的sql在xml中按照一定语法来进行拼接,所以拼接之前,我们了解一下foreach标签中几个常见元素的作用 1.collection ‌List ...