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与数据库开 ...
随机推荐
- bzoj3541: Spoj59 Bytelandian Information Agency
Description BIA机构内部使用一个包含N台计算机的网络.每台计算机被标号为1..N,并且1号机是服务器.计算机被一些单向传输线连接着,每条数据线连接两台计算机.服务器可以向任 ...
- BZOJ 3223 文艺平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 ...
- js 实现 di
前些时候有使用过AngularJS一些时间,最大的感受就是Angular完全颠覆了我们开发Web应用的方式,自己被其许多耳目一新的设计思想所折服. 首先想说的就是依赖注入(DI),这也意味着,你在使用 ...
- 关于用POI和EXCEL交互的问题
废话不多说,直接通过例子来说明POI的使用: 1.一个创建excel并写入数据的小例子,参照网上的一个例子: public class CreateXL { /** * @param args */ ...
- Android Wear开发 - 数据通讯 - 第一节 : 连接数据层
http://developer.android.com/training/wearables/data-layer/accessing.html Accessing the Wearable Dat ...
- BZOJ 1050 [HAOI2006]旅行comf
1050: [HAOI2006]旅行comf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1889 Solved: 976[Submit][Sta ...
- vijos1514天才的记忆
P1514天才的记忆 背景 神仙飞啊飞 描述 从前有个人名叫W and N and B,他有着天才般的记忆力,他珍藏了许多许多的宝藏.在他离世之后留给后人一个难题(专门考验记忆力的啊!),如果谁能轻松 ...
- oracle存储过程 --1
一,oracle存储过程语法 1.oracle存储过程结构 CREATE OR REPLACE PROCEDURE oracle存储过程名字 ( 参数1 IN NUMBER, 参 ...
- (转载)PHP 动态生成表格
(转载)http://hi.baidu.com/shawns/item/c7d51f351c6a0482b711dba6 提要:PHP能够高效地生成HTML代码,其中,动态生成表格是实际应用中经常碰到 ...
- F - Wormholes
题目大意: 农民约翰在农场散步的时候发现农场有大量的虫洞,这些虫洞是非常特别的因为它们都是单向通道,为了方便现在把约翰的农田划分成N快区域,M条道路,W的虫洞. 约翰是时空旅行的粉丝,他希望这样做,在 ...