C#委托理解(个人观点)
前言:
根据百度百科字面意思是:把事情托付给别人或别的机构(办理/处理), 我们就按汉字意思来理解;
再罗嗦一点通俗一点就是:当某人发生什么事情后把处理这个事情的工作托付给别人或别的机构(办理/处理);
举个现实的案例"李天1案例":当杨女士受到侵害后,委托律师对李天1进行控告,委托医生进行身体检查;
用委托实现就是如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 委托
{
/*
c#委托理解---我个人对委托的理解
根据百度百科字面意思是:把事情托付给别人或别的机构(办理/处理)
再罗嗦一点通俗一点就是:当某人发生什么事情后把处理这个事情的工作托付给别人或别的机构(办理/处理);
现实的案例李天1案例:当杨女士受到侵害后,委托律师对李天1进行控告,委托医生进行身体检查;
用程序实现就是如下
*/
class Program
{
static void Main(string[] args)
{
MissYang missYang = new MissYang();
missYang.WasHurted = true; //伤害杨小姐
/*传统实现方式.....................................................................*/
////律师起诉李天1
//Lawyer lawyer = new Lawyer();
//lawyer.Sue();
//医生对杨女士检查身体
//Doctor doctor = new Doctor();
//doctor.Check(); /*使用委托实现方式..................................................................*/
//1:杨小姐委托律师起诉,委托医生检查身体,那么杨小姐这个类中就应该有个委托的功能;即一个委托的实例,对应代码 @A
//那么我们就要先定义一个委托类型(不存在任意一个类中),MissYangDelegate,对应代码 @B
//2:杨小姐委托律师要起诉李天1,也即是将律师起诉的方法传到杨小姐的委托实例中. 意味着这个律师起诉方法就是杨小姐委托的事情; 对应代码 @C
//3:杨小姐委托医生检查身体, 也即是将医生检查身体的方法传到杨小姐的委托实例中.意味着这个医生检查身体方法就是杨小姐委托的事情;对应代码 @D
missYang.missYangDelegate = new MissYangDelegate(new Lawyer().Sue);// @C
missYang.missYangDelegate();//启动委托,这里启动后会去执行 new Lawyer().Sue()方法
missYang.missYangDelegate = new MissYangDelegate(new Doctor().Check);// @D
missYang.missYangDelegate();//启动委托,这里启动后会去执行 new Doctor().Check()方法 Console.Read();
}
} /// <summary>
/// 杨小姐类
/// </summary>
class MissYang
{
/// <summary>
/// 是否被被伤害
/// </summary>
public bool WasHurted = false;
/// <summary>
/// '杨小姐委托'的实例
/// </summary>
public MissYangDelegate missYangDelegate;//@A
} /// <summary>
/// 律师类
/// </summary>
class Lawyer
{
public void Sue()
{
Console.WriteLine("律师起诉李天1......");
}
}
/// <summary>
/// 医生类
/// </summary>
class Doctor
{
public void Check()
{
Console.WriteLine("医生给杨小姐检查身体......");
}
}
/// <summary>
/// '杨小姐委托'类型
/// </summary>
public delegate void MissYangDelegate();//@B
}
后序:从上面的例子也许并不能直观的看出使用委托的好处;但是知道委托是这么一回事(简单来说:实例委托类型的时候,往委托里面传一个方法名,如 "@C"和"@D"两处),先抛开事件不去想;
C#委托理解(个人观点)的更多相关文章
- 委托学习总结(一)浅谈对C#委托理解
初入社会,对于我这个初级程序员来说要学的东西实在太多了,公司最近在做一个winform框架开发的桌面应用程序,众所周知,winform也好,webform也好,里面随处可见的事件驱动,有事件,当然也少 ...
- 通过Func 委托理解委托和匿名方法及Lambda 表达式
Func<T, TResult> 委托 封装一个具有一个参数并返回 TResult 参数指定的类型值的方法. 命名空间: System 程序集: mscorlib(在 mscorlib.d ...
- C#学习之初步理解委托、事件、匿名方法和Lambda
最经在学习LinqtoSql,然后扯到Lambda表达式,然后扯到匿名方法,然后扯到委托,最后扯到事件处理...后来发现对委托这个概念和事件处理这个过程理解得不是很清晰,遂得一下学习笔记.那里说得不对 ...
- 理解委托(delegate)及为什么要使用委托
理解委托(delegate)及为什么要使用委托 委托:是一种定义方法签名的类型. 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联. 您可以通过委托实例调用方法. 上述为官方说法,理解起来 ...
- C#对委托的初步理解理解
作为新手对委托的学习: 1.定义委托:委托实际上是一个类,在定义委托前就知道了方法的返回类型和方法的参数类型(可以把委托理解为只知道方法的返回类型和方法的参数类型,不知道方法体) public de ...
- C#委托与事件
一.在控制台下使用委托和事件 我们都知道,C#中有"接口"这个概念,所谓的"接口"就是定义一套标准,然后由实现类来具体实现其中的方法,所以说"接口,是 ...
- C#深入浅出 C#语法中的重中之重——委托(四)
入行半年多了,委托干什么用的还不知道,真心说不过去了,关键对这东西有点恐惧,主要是被老师吓的,记得我C#专业课老师在讲到委托时,原话是这样的,同学们,委托这个地方是难点,暂时不讲,讲了你也不懂,等你有 ...
- 深入理解事件(Event)
前言 在前一篇文章中讲到了Event 发布与订阅(一) 里面用到了事件来实现一些发布与订阅,当时对事件及其委托理解的还不是太深入,可能在使用上有点捉急.这篇来好好讲讲事件,以及通过一些小DEMO来加深 ...
- 再谈C#委托与事件
之前写过一篇关于C#委托与事件的文章(见<C#委托和事件例析>),不过还是收到一些网友的提问.所以,今天再换另一个角度来详解一下这个问题. 一.在控制台下使用委托和事件 我们都知道,C#中 ...
随机推荐
- iOS中常用的设计模式
常用的设计模式(一)代理模式应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现.优势:解耦合敏捷原则:开放-封闭原则实例:tableview的 数据源delegate,通过 ...
- 小制作-css+html旋转木马
源代码: <!DOCTYPE html><html><head> <title></title> <meta charse ...
- 解决Oracle在scott用户下创建视图(VIEW)权限不足的方法
问题描述:在scott用户下创建视图的时候,报错:权限不足.(其他用户以此类推)解决方法: 以dba用户登录 sqlplus / as sysdba 赋予scott用户创建VIEW的权限 grant ...
- 文件操作 模式r+与w+
r+与w+ r+是读写模式,在文件的末尾进行追加操作. >>> myfile=open('pwd.txt', ... 'r+') >>> myfile.read() ...
- NOIP2016日记
今天下午2:30~4:30考NOIP2016..我4:00前久出来了,没仔细检查.. 错了两道基础题..(T_T) >_< 至少能过..就这样吧..努力复赛!!
- Mysql 查看版本号
1.mysql> status; 2.select version(); mysql> select version();+------------+| version() |+----- ...
- AJAX原理及应用
Ajax技术的核心是XMLHttpRequest对象(简称XHR),可以通过使用XMLHttpRequest对象获取到服务器的数据,然后再通过DOM将数据插入到页面中呈现.也就是javascript可 ...
- OpenGL法向量变换
OpenGL光照开启时,法向量用于决定特定顶点或面上接受到光照的多少.光照处理过程作用于观察坐标空间,因此,模型对象坐标系的法向量也需要使用GL_MODELVIEW矩阵变换到观察坐标系. 然而,法向量 ...
- el表达式无法获取springmvc的model封装好的数据之解决方法
近日碰到奇怪的问题,应该挺好解决的,可是就是卡住我两天 下面我来描述一下问题 用的是springmvc,自然需要controller,假设我现在所有的配置都是对的. controller代码 @Req ...
- ASP.NET(转自wiki)
ASP.NET是由微软在.NET Framework框架中所提供,开发Web应用程序的类库,封装在System.Web.dll文件中,显露出System.Web名字空间,并提供ASP.NET网页处理. ...