C#之—委托
(1)定义委托:(百度百科样例,只有写了才有收获)
namespace Entrust
{
public delegate void GreetingDelegate(string name); //定义委托
class Class1
{
public void EnglishGreeting(string name)
{
Console.WriteLine("Good Morning." + name);
} public void ChineseGreeting(string name)
{
Console.WriteLine("早上好." +name);
} public void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
}
}
测试类:
namespace Entrust
{
class TestMain
{
static void Main(string[] args)
{
Class1 c = new Class1(); //c.GreetPeople("San Zhang",c.EnglishGreeting);
//c.GreetPeople("张三", c.ChineseGreeting); //Console.WriteLine("委托变量!");
//GreetingDelegate delegate1 = c.EnglishGreeting;
//GreetingDelegate delegate2 = c.ChineseGreeting;
//c.GreetPeople("张三", delegate2);
//c.GreetPeople("San Zhang", delegate1); //Console.WriteLine("多个方法绑定同一个委托!");
//GreetingDelegate delegate1;
//delegate1 = c.EnglishGreeting;
//delegate1 += c.ChineseGreeting;
//c.GreetPeople("李四",delegate1); //Console.WriteLine("直接调用委托!");
//GreetingDelegate delegate1;
//delegate1 = c.EnglishGreeting;
//delegate1 += c.ChineseGreeting;
//delegate1("小张"); //GreetingDelegate delegate1 = new GreetingDelegate(c.EnglishGreeting);
//delegate1 += c.ChineseGreeting;
//delegate1("小李"); GreetingDelegate delegate1 = c.EnglishGreeting;
delegate1 += c.ChineseGreeting; //绑定委托
delegate1 -= c.EnglishGreeting; //解除委托
delegate1("小张");
}
}
}
(2)定义委托事件(封装属性和方法)
namespace Entrust
{
public delegate void GreetingDelegate1(string name); class GreetingManage
{
public event GreetingDelegate1 MakeGreet;//这里声明一个事件 public GreetingDelegate1 delegate1;
public void GreetPeople(string name)
{
//if (delegate1 != null)
// delegate1(name);
MakeGreet(name);
}
}
}
执行的方法类
namespace Entrust
{
class GreetingLanguage
{
public void EnglishGreeting(string name)
{
Console.WriteLine("Morning, " + name);
} public void ChineseGreeting(string name)
{
Console.WriteLine("早上好, " + name);
}
}
}
测试类:
namespace Entrust
{
class TestMain
{
static void Main(string[] args)
{
GreetingLanguage gl = new GreetingLanguage();
GreetingManage gm = new GreetingManage();
//gm.delegate1 = gl.EnglishGreeting;
gm.MakeGreet += gl.ChineseGreeting;
gm.GreetPeople("小张");
Console.ReadKey();
}
}
}
(3)委托弥补观察者模式的不足(若观察者不存在)详见(设计模式之—观察者模式)
通知者接口类(Subject)
namespace Observer_Pattern.CLASS
{
interface Subject
{
void Notify(); //通知
string SubjectState
{
get;
set;
}
}
}
秘书类(secreter)实现通知者接口
namespace Observer_Pattern.CLASS
{
public delegate void EventHandler(); //声明一个委托
class Secretary:Subject
{
public event EventHandler Update; //声明一事件Update,类型为委托EventHandler
private string action; /// <summary>
/// 通知
/// </summary>
public void Notify()
{
Update();
} public string SubjectState
{
get { return action; }
set { action = value; }
}
}
}
炒股工作者(stockWorker)
namespace Observer_Pattern.CLASS
{
class StockObserver
{
private string name;
private Subject sub;
public StockObserver(string name, Subject sub)
{
this.name = name;
this.sub = sub;
}
public void StockUpdate()
{
Console.WriteLine("{0} ,{1} 关闭股票软件,继续工作!",sub.SubjectState,name);
}
}
}
看NBA工作者(NBAWorker)
namespace Observer_Pattern.CLASS
{
class NBAObserver
{
private string name;
private Subject sub;
public NBAObserver(string name, Subject sub)
{
this.name = name;
this.sub = sub;
} public void NBAUpdate()
{
Console.WriteLine("{0} ,{1} 关闭NBA视频,继续工作!",sub.SubjectState,name);
}
}
}
测试类(TestMain)
namespace ObserverPattern_Entrust_
{
class TestMain
{
static void Main(string[] args)
{
Secretary mishu = new Secretary();
StockObserver worker1 = new StockObserver("小张", mishu);
NBAObserver worker2 = new NBAObserver("小李", mishu); mishu.Update += worker1.StockUpdate; //绑定委托
mishu.Update += worker2.NBAUpdate; //绑定委托 mishu.SubjectState = "老板回来了";
mishu.Notify(); //调用委托 Console.ReadLine();
}
}
}
测试结果:
C#之—委托的更多相关文章
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
- C#基础篇 - 理解委托和事件
1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...
- [.NET] C# 知识回顾 - 委托 delegate (续)
C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...
- [C#] C# 知识回顾 - 委托 delegate
C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...
- 9、委托、事件、Lambda
开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.) 第 ...
- iOS 委托与文本输入(内容根据iOS编程编写)
文本框(UITextField) 本章节继续编辑 JXHypnoNerd .文件地址 . 首先我们继续编辑 JXHypnosisViewController.m 修改 loadView 方法,向 ...
- C#委托异步调用
参考页面: http://www.yuanjiaocheng.net/webapi/mvc-consume-webapi-get.html http://www.yuanjiaocheng.net/w ...
- JavaScript事件代理和委托(Delegation)
JavaScript事件代理 首先介绍一下JavaScript的事件代理.事件代理在JS世界中一个非常有用也很有趣的功能.当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委 ...
- .NET面试题系列[7] - 委托与事件
委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...
- .NET基础拾遗(4)委托、事件、反射与特性
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
随机推荐
- NandFlash
一.概述 1.NandFlash NAND结构能提供极高的单元密度,可以达到高存储密度,比如能达到256M,并且写入和擦除的速度也很快.应用NAND的困难在于flash的管理需要特殊的系统接口. 2. ...
- BZOJ 1200 木梳
Description Input 第一行为整数L,其中4≤L≤100000,且有50%的数据满足L≤104,表示木板下侧直线段的长.第二行为L个正整数A1,A2,…,AL,其中Ai≤108 Outp ...
- [BZOJ 2821] 作诗(Poetize) 【分块】
题目链接:BZOJ - 2821 题目分析 因为强制在线了,所以无法用莫队..可以使用分块来做. 做法是,将 n 个数分成 n/x 个块,每个块大小为 x .先预处理出 f[i][j] ,表示从第 i ...
- 【Java】java的内存浅析
一.闲谈下 201407月记着那时候身体垮了下来,呵呵.想说,对自己的说,也是对大家的负责吧.那时候胸疼胸闷,然后几乎累垮了,我还坚持了一星期,那一星期真的迷迷糊糊.完全不能看代码,看代码就晕.一直想 ...
- Arctic Network
poj2349:http://poj.org/problem?id=2349 题意:有卫星电台的城市之间可以任意联络.没有卫星电台的城市只能和距离小于等于D的城市联络.告诉你卫星电台的个数S,让你求最 ...
- 两个div之间有空隙
加句*{ margin:0; padding:0;} 最近在做网页时发现,在IE7下(FF没试过),div与div之间有时会出20个像素左右的空隙,除非把margin设成负值,否则空隙无法去除.我在 ...
- 【POJ】1035 Spell checker
字典树. #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib ...
- BZOJ1679: [Usaco2005 Jan]Moo Volume 牛的呼声
1679: [Usaco2005 Jan]Moo Volume 牛的呼声 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 723 Solved: 346[ ...
- 字符串(后缀数组||SAM):NOI2015 品酒大会
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAByIAAALuCAIAAABtq0bwAAAgAElEQVR4nOy9f2wb150vev4boESeln ...
- 字符串(KMP):BZOJ 3670 [Noi2014]动物园
3670: [Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1521 Solved: 813[Submit][Status] ...