.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 ...
随机推荐
- Maven本地仓库/中央仓库(阿里镜像)/JDK配置
第一步打开你已经下载好的Maven,进入:根磁盘:\......\apache-maven-3.6.2\conf文件夹找到settings.xml文件(没有的可以自行创建一个同名的文件即可) 使用文本 ...
- Java实现 LeetCode 111 二叉树的最小深度
111. 二叉树的最小深度 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...
- SQL Server账号密码(sa)登录失败 错误原因:233
(其实以前经常用的时候,都很简单,最近一段时间不用了,再一看发现都忘记的差不多了,还是写一篇博客吧,防止下一次再在这种问题上面浪费时间) 右键此电脑,点击管理 如果没有此电脑打开文件夹 在这里右键也是 ...
- Java实现表达式计算求值
问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...
- Java实现第九届蓝桥杯方格计数
方格计数 题目描述 如图p1.png所示,在二维平面上有无数个1x1的小方格. 我们以某个小方格的一个顶点为圆心画一个半径为1000的圆. 你能计算出这个圆里有多少个完整的小方格吗? 注意:需要提交的 ...
- Android开发项目中常用到的开源库
圆形头像 https://github.com/hdodenhof/CircleImageView ButterKnife https://github.com/JakeWharton/butterk ...
- (前端)angular报错日常以及记录日常
目录1 json的key...value问题 遍历json的key...value的时候报错: [tslint] for (... in ...) statements must be filtere ...
- Vue-websocket使用
Vue中使用websocket 1.介绍:websocket是一个双向通行工具,解决了原来的http单向通信的弊端,可以让服务器主动向客户端推送数据 // 安装客户端的socket npm i soc ...
- dubbo traceId透传实现日志链路追踪(基于Filter和RpcContext实现)
一.要解决什么问题: 使用elk的过程中发现如下问题: 1.无法准确定位一个请求经过了哪些服务 2.多个请求线程的日志交替打印,不利于查看按时间顺序查看一个请求的日志. 二.期望效果 能够查看一个请求 ...
- python 直方图
import matplotlib.pyplot as plt import numpy as np pop = np.random.randint(0,100,100) pop n,bins,pat ...