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与数据库开 ...
随机推荐
- 怎么用notepad配置来运行C语音环境
想要运行C语言,我们可以用notepad软件来进行编辑,那么怎么用notepad 配置运行c语言开发环境呢? Notepad++是一款很好的编辑器,可以用来开发很多的工具,具体大家请看下文给大家详细讲 ...
- js两个时间相减
平常总会遇到需要算两个日期之间是多少天,以下是使用JavaScript算时间差多少天的: // 给日期类对象添加日期差方法,返回日期与diff参数日期的时间差,单位为天 Date.prototype. ...
- Solr4.8.0源码分析(23)之SolrCloud的Recovery策略(四)
Solr4.8.0源码分析(23)之SolrCloud的Recovery策略(四) 题记:本来计划的SolrCloud的Recovery策略的文章是3篇的,但是没想到Recovery的内容蛮多的,前面 ...
- VS自带的功能:性能和诊断
先看一眼代码: using System; using System.Collections.Generic; using XCode; using XCode.Configuration; usin ...
- 转:gpio_direction_output 与 gpio_set_value
gpio_set_value(port_num,0/1) 一般只是在这个GPIO口的寄存器上写上某个值,至于这个端口是否设置为输出,它就管不了! 而gpio_direction_output (por ...
- java design
http://www.austintek.com/mvc/ http://msdn.microsoft.com/zh-cn/magazine/cc163419.aspx http://www.croc ...
- c# 集合ArrayList;特殊集合Stack、Queue
一) ArrayList 1.foreach遍历数组中各个元素,执行内部语句 2. 3. 4. myarry.Clear();//将集合清空 bool b = myarry.Contains(3 ...
- Linux Kernel 远程拒绝服务漏洞
漏洞名称: Linux Kernel 远程拒绝服务漏洞 CNNVD编号: CNNVD-201307-309 发布时间: 2013-07-18 更新时间: 2013-07-18 危害等级: 漏洞类 ...
- 动态规划(斜率优化):BZOJ 1010 【HNOI2008】 玩具装箱
玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8218 Solved: 3233[Submit] Description P 教授要去 ...
- 动态规划(二维背包问题):UVAoj 473
Raucous Rockers You just inherited the rights to n previously unreleased songs recorded by the pop ...