【C#】【平时作业】习题-10-委托
什么是委托?
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-委托的更多相关文章
- 成员函数指针与高效C++委托 (delegate)
下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...
- C#学习(2):委托
1.疑问: 1.委托是什么? 2.为什么需要委托? 3.委托能用来做什么? 4.如何自定义委托? 5..NET默认的委托类型有哪几种? 6.怎样使用委托? 7.多播委托是什么? 8什么是泛型委托? 9 ...
- C#面试:委托
面试常见题: 1.委托是什么?★☆ 2.为什么需要委托?★☆ 3.委托能用来做什么?★☆ 4.如何自定义委托★☆ 5..NET默认的委托类型有哪几种?★☆ 6.怎样使用委托?★★★ 7.多播委托是什么 ...
- 【Unity|C#】基础篇(8)——委托(Delegate)/ 事件(Event)
[学习资料] <C#图解教程>(第13~14章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.bai ...
- 【C#图解教程学习笔记】第13章 委托
13.1 什么是委托 委托是持有一个或多个方法的对象,可将一个方法传递到另一个方法. 委托是用户自定义的引用类型. 13.2 委托概述 类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列 ...
- Ansible 小手册系列 十七(特性模块)
异步操作和轮询 --- # Requires ansible 1.8+ - name: 'YUM - fire and forget task' yum: name=docker-io state=i ...
- 彻底弄懂C#中delegate、event、EventHandler、Action、Func的使用和区别
[目录] 1 委托 2 事件-概念的引出 3 事件-关于异常 4 事件-关于异步 5 委托-Func与Action 1 委托 在.NET中定义"委托"需要用到delegate关键字 ...
- 《精通C#》委托与事件(10章)
委托可用来解耦以及状态变化的实时通知,以及其他的一些作用,但是经验所限,目前还未遇见.网上的大多数例子都是类似于,使用委托,然后用console返回方法的返回值,有时候会在想,委托的通知如果是这样的话 ...
- 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 ...
- C#学习笔记(10)——再谈委托,不同国家问候的例子
说明(2017-6-14 09:08:38): 1. 首先是一个简单的委托 (1)命名空间下定义一个委托MyDel: public delegate void MyDel(string name); ...
随机推荐
- USB-A, Micro, lightning and USB-C
- USB硬件特性(速度、名称、供电)
USB传输速度 USB1.0版本,USB LS(Low Speed低速),速度1.5Mbps. USB1.1版本,USB FS(Full Speed全速),速度12Mbps. USB2.0版本,USB ...
- vue2基于 vue-cropper插件对图片裁剪
<template> <div id="app"> <div class="model" v-show="model&q ...
- MidJourney新手攻略
目录 MidJourney简介 MidJourney的使用 1. 加入Discord 2. 选择一个频道 3. 使用/imagine来输入提示 4. 等待一分钟左右,会输出四张图 5. 查看结果 Re ...
- 题解:AT_arc182_a [ARC182A] Chmax Rush!
题目传送门 洛谷题解 思路 我们只需要枚举每一个 \(v_i\),对于 \(i\) 后面的 \(v_j\) 如果 \(v_i > v_j\) 进行以下讨论. \(p_i = p_j\) \(p_ ...
- KNN算法:近朱者赤,近墨者黑
文章目录 1.一个例子 2.算法原理 3.算法的优缺点 3.关于 K 的选取 4.代码实现 今天我要讲的这个算法是最近邻算法(K-NearestNeighbor),简称 KNN 算法. 1.一个例子 ...
- [rCore学习笔记 031] SV39多级页表的硬件机制
看到这个题目就知道上一节提到的RISC-V手册的10.6节又有用武之地了. 这里只需注意,RV32 的分页方案Sv32支持4GiB的虚址空间,RV64 支持多种分页方案,但我们只介绍最受欢迎的一种,S ...
- linu管理文本文件
vi\vim编辑器的三种工作模式 命令模式(Command mode):按键编辑器都理解为命令,以命令驱动执行不同的功能.此模型下,不能自由进行文本编辑. 输入模式(Insert mode):也就是所 ...
- SSAS部署失败方法总结
最近在自学SSAS,从最简单的入手,却频频遇到问题,为了以后在学习过程中能更快的进行问题的定位,所以在此将遇到的问题以及解决方案进行记录 Q1:数据源"Adventure Works DW2 ...
- 2024/9/16 CSP-S模拟赛试题
A 这题是很有意思的一个题,思路就是你考虑kt的位置只可能在四个角,因为这种情况下,他的距离才会最远对吧,所以你就暴力找另一个人fengwu的点的位置,然后计算他们之间的距离然后你求一个\(\max\ ...