.Net: C#中的委托(Delegate)和事件(Event)
我举两个实例。
1,[3a]不同语言的问候。
2,[3b]中文版QQ和Tencent QQ(国际版QQ)用户个人信息的”性别“呈现。
3、两个委托(Delegate)实例解析。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; /// <summary>
/// 语言类
/// </summary>
namespace Gyg.DE.Models
{
public class Language
{
/// <summary>
/// 声明一个委托
/// </summary>
/// <param name="name"></param>
public delegate string GrateingDelegate(string name); /// <summary>
/// 中式问候
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static string EngGrateing(string name)
{
return "英文名字=" + name;
} /// <summary>
/// 英式问候
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static string ChinaGreateing(string name)
{
return "中文名字=" + name;
} public static string GreatePerpon(string name, GrateingDelegate gratePerpon)
{
return gratePerpon(name);
}
}
}
案例2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Gyg.DE.Models
{
public class Sex
{
public delegate string SexDalegate(string sexCode); public static string ChinaSex(string sexCode)
{
switch (sexCode)
{
case "":
return "男";
case "":
return "女";
default:
return "未知";
}
} public static string EngSex(string sexCode)
{
switch (sexCode)
{
case "":
return "girl";
case "":
return "boy";
default:
return "Unknown";
}
} public static string SexConvert(string sexCode, SexDalegate sexConvert)
{
return sexConvert(sexCode);
}
}
}
控制器代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; using Gyg.DE.Models; namespace Gyg.DE.Controllers
{
public class PerponController : Controller
{
// GET: Perpon
public ActionResult Index()
{
string name = Language.GreatePerpon("顾牡丹", Language.ChinaGreateing);
string nameEng = Language.GreatePerpon("gyg", Language.EngGrateing); ViewData["name"] = name;
ViewData["nameEng"] = nameEng; return View();
} public ActionResult SexTest()
{
ViewData["ChinaSex"] = Sex.SexConvert("", Sex.ChinaSex);
ViewData["EngSex"] = Sex.SexConvert("", Sex.EngSex);
return View();
}
}
}
页面代码:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@ViewData["name"] <br />
@ViewData["nameEng"] <br />
<a href="/Perpon/SexTest">SexTest</a>
</div>
</body>
</html>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>SexTest</title>
</head>
<body>
<div>
@ViewData["ChinaSex"] <br />
@ViewData["EngSex"] <br />
<a href="/Perpon/Index">Index</a>
</div>
</body>
</html>
4、使用委托(Delegate)有哪些好处?
我们现在对委托做一个总结:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
.Net: C#中的委托(Delegate)和事件(Event)的更多相关文章
- C#中的委托(Delegate)和事件(Event)
原文地址:C#中的委托(Delegate)和事件(Event) 作者:jiyuan51 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式--观察者(Obs ...
- (转)C#中的委托(Delegate)和事件(Event)
转自:http://blog.chinaunix.net/uid-576762-id-2733751.html 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写 ...
- 关于C# 委托(delegate)与事件(event)的用法及事例
C#中的委托和事件对于新手可能会有一点难理解,所以先从一个小例子入手,以便能更好的理解其如何使用.有一个学生每天定闹钟在早上6点起床,所以当每天早上6点的时候,闹钟就会响起来,从而学生才会按时起床. ...
- 重温委托(delegate)和事件(event)
1.delegate是什么 某种意义上来讲,你可以把delegate理解成C语言中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m,说白了就是可以把方法当作 ...
- C#中的委托 Delegate(委托 也叫代表,代表一类方法)
1. 委托类似与 C或C++中的函数指针,但委托是 面向对象的,并且是类型安全的 详情可查看官方文档:https://msdn.microsoft.com/en-us/library/ms173172 ...
- C#中的委托和事件(一)——delegate
前言 来说一说委托(delegate)和事件(event),本篇采取的形式是翻译微软Delegate的docs中的重要部分(不要问我为什么微软的docs有中文还要读英文,因为读中文感觉自己有阅读障碍- ...
- 【温故知新】c#事件event
从上一篇文章[温故知新]C#委托delegate可知,委托delegate和事件Event非常的相似,区别就是event关键字,给delegate穿上了个“马甲”. 让我们来看官方定义: 类或对象可以 ...
- c#中的delegate(委托)和event(事件)
c#中的delegate(委托)和event(事件) 一.delegate是什么东西? 完全可以把delegate理解成C中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能 ...
- 终于会用c#中的delegate(委托)和event(事件)了
一.开篇忏悔 对自己最拿手的编程语言C#,我想对你说声对不起,因为我到现在为止才明白c#中的delegate和event是怎么用的,惭愧那.好了,那今天就趁月黑风高的夜晚简单来谈谈delegate和e ...
随机推荐
- Splay代码简化版
皆さん.こんにちは.上一篇文章,我们讲了Splay如何实现.这一篇我们来让我们的伸展树短一点. 上一篇Splay讲解的链接:リンク. 首先还是变量的定义,在这里呢,我把一些小函数也用Define来实现 ...
- “造轮运动”之 ORM框架系列(二)~ 说说我心目中的ORM框架
ORM概念解析 首先梳理一下ORM的概念,ORM的全拼是Object Relation Mapping (对象关系映射),其中Object就是面向对象语言中的对象,本文使用的是c#语言,所以就是.ne ...
- Java实现 蓝桥杯 算法训练 递归求二项式系数
算法训练 6-1 递归求二项式系数值 时间限制:10.0s 内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例. 3 10 样例输出 与上面的样例输入对应的输出. 数据规模和约定 ...
- mysql数据库运维方案
数据库不仅仅是dba的工作,每一个测试人员也应该懂得基本的数据运维操作,因为数据库是数据承载的地方并且是系统中非常重要的一部分,所以我们也需要熟练的对数据库进行基本维护. 01.常用备份恢复命令 第1 ...
- tensorflow2.0学习笔记第一章第五节
1.5简单神经网络实现过程全览
- ThinkPHP6.0 + Vue + ElementUI + axios 的环境安装到实现 CURD 操作!
官方文档地址: ThinkPHP6.0: https://www.kancloud.cn/manual/thinkphp6_0/1037479 ElemetUI: https://elemen ...
- 掌握SpringBoot-2.3的容器探针:深入篇
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:原创分类汇总及配套源码,涉及Java.Docker.K8S.DevOPS等 关于<Spr ...
- pdf文件处理--QPDF
1.分割pdf文件 从原文件中取出n-m页,保留原文件的目录格式: qpdf infile.pdf --pages . n-m -- outfile.pdf 从原文件中取出n-m页,不保留原文件的目录 ...
- 利用Python将多个PDF文件合并
from PyPDF2 import PdfFileMerger import os files = os.listdir()#列出目录中的所有文件 merger = PdfFileMerger() ...
- 学而思Java开发岗位面试
去学而思培优面试了. 有四道笔试题,后面会整理做法. 1.给一个文件夹,用递归的方式统计这个目录及其子目录不同文件类型的个数. 如,输出:jpg:几个文件,txt:几个文件... 2.不适用加减乘除, ...