什么是委托?

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. 大模型应用开发初探 : 基于Coze创建Agent

    大家好,我是Edison. 最近学习了一门课程<AI Agent入门实战>,了解了如何在Coze平台上创建AI Agent,发现它对我们个人(C端用户)而言十分有用,分享给你一下. Coz ...

  2. vue前端开发仿钉图系列(4)右侧行政区绘制的开发详解

    行政区绘制是基于高德地图的api,需要在高德提供的代码基础上做好html代码在vue页面上的适配.核心功能就是选择省市区,可以根据需要绘制对应选中的地图图层.整理总结不易,如需全部代码,请联系我150 ...

  3. 65.说下vue3的使用感想(说些vue3对比vue3的方便之处)

    vue3 使用了组合式API,setup 替换了选项式api ,不需要在多个api里面写代码了,而且使用了setup的语法糖,可以更加方便写代码 : vue3使用proxy替代了Object.defi ...

  4. 63.CDN优化

    虽然CDN引入组件库可以优化项目,减轻服务器负载,但是在真实的项目开发中不推荐使用CDN : 因为: 1. 使用第三方服务器不稳定 2. 需要后端配置 3. 要知道组件库的全局变量名

  5. 让查询可以使用 json path

    记录一下最近sv.db的完善 1. 让查询可以使用 json path 有时候我们会存储 json 到 db,也有时会只取json部分数据,或者通过json部分数据进行过滤 所以sv.db 也支持这些 ...

  6. 斜率优化DP简单总结&&“土地购买”题解

    今天刚刷完了斜率优化DP,简单从头回顾一下. \[首先,能写出DP方程应该是最重要的,毕竟斜率只是用来优化的 \] 那么一个DP方程能用斜率优化,具备一种形式: \[f[i]+s1[i]+A[i]*B ...

  7. 网络应用模型的经典分类:C/S 与 P2P

    网络应用无处不在,从我们日常使用的社交媒体到远程文件传输,网络应用模型是支撑这些通信和服务的基础架构.通常,这些网络应用根据其结构原理可以被大致划分为两大类:C/S(Client/Server)模型和 ...

  8. Games101 作业8 质点弹簧系统

    目录 1 前言 2 基础数据结构 3 欧拉 4 Verlet Integration 4.1 Constraints 1 前言 质点弹簧系统的模拟仿真,其实非常简单,核心就是牛顿第二定律 \(F = ...

  9. LookupViT:类似SE的token压缩方案,加速还能丰富特征 | ECCV'24

    视觉变换器(ViT)已成为众多工业级视觉解决方案的事实标准选择.但由于每一层都计算自注意力,这导致其推理成本对许多场景而言是不可接受的,因为自注意力在标记数量上具有平方的计算复杂度.另一方面,图像中的 ...

  10. 终于注册成功了 Web of Science 账号

    地址: https://www.webofscience.com/wos/op/publications/add 个人主页: https://www.webofscience.com/wos/auth ...