什么是委托?

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. Android dtbo(3) 编译和验证

    您可以使用设备树编译器 (DTC) 编译设备树源文件.不过,在将叠加层 DT 应用于目标主 DT 之前,您还应该通过模拟 DTO 的行为来验证结果. 1. 通过DTC进行编译 构建主 DT .dts ...

  2. Redhat 7安装Oracle 11.2.0.4 RAC 数据库软件中报错:Error in invoking target 'agent nmhs' of makefile

    环境:Redhat Linux 7.6 + Oracle 11.2.0.4 RAC 现象:图像化安装数据库软件过程中的86%时,报错. 1. 具体现象 2. 定位问题 3. 解决问题 1. 具体现象 ...

  3. IKAnalyzer分词工具的spring boot项目整合代码版

    简介 IK Analyzer是什么呢,一个很轻量的中文分词工具,是基于java开发的轻量级的中文分词工具包.它是以开源项目Luence为主体的,结合词典分词和文法分析算法的中文分词组件.IK有很多版本 ...

  4. 元类、实现ORM

    阅读目录: 元类 元类实现ORM 元类 1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Python中这一点仍然成立: >>> class Obj ...

  5. JS 识别安卓还是ios苹果、识别是否微信内置浏览器、手机类型

    1.识别手机平台是IOS还是安卓 /** * [isMobile 判断平台] * @param test: 0:iPhone 1:Android */ function ismobile(test) ...

  6. SVN上的修改提交时间、作者以及简单的SVN操作说明

    情况说明 因为部分SVN记录上传时间不符合规范,需要修改因此有这个需求.默认情况下SVN是不允许修改时间和作者信息,需要服务器进行配置. 一.服务的配置变更 我用的是Windows版本,在这个地方配置 ...

  7. 需求解决 _针对特定Class设置样式 _CSS _20210906

    需求解决 _针对特定Class设置样式 _CSS _20210906 有一个需求,需要对一些具有 某个Class的标签 ,icon,以及其中的字体设置 隐藏或者展示 解决方法如下:(需要对 该页面引用 ...

  8. Goland编译/运行

    例子程序: 3种编译方式 方式1:直接Run 编译/运行成功,且自动创建一个文件类型的编译规则. 上图中配置说明: 1.Name:为本条配置信息的名称,可以自定义,也可以使用系统默认的值 2.Run ...

  9. web上线部署系统 Walle

    Walle瓦力是基于git和rsync实现的一个web部署系统工具. 用户分身份注册.登录 开发者发起上线任务申请 管理者审核上线任务 支持多项目部署 快速回滚 部署前准备任务(前置检查) 代码检出后 ...

  10. SQL Server 数据太多如何优化

    大家好,我是 V 哥.讲了很多数据库,有小伙伴说,SQL Server 也讲一讲啊,好吧,V 哥做个听话的门童,今天要聊一聊 SQL Server. 在 SQL Server 中,当数据量增大时,数据 ...