07 2013 档案
摘要:公司用WCF开发即时通讯软件已有三年多,下面总结一下工作中的用到的知识。 .net3.0带来了一种专门用来构建分布式系统的API-WCF(Windows Communication Foundation)。与你过去所使用的其他分布式AIP(DCOM、.NET远程处理、XML Web服务等)有所不同,WCF提供了统一的、可扩展的单一模型来使用以前多个分布式技术。 各种分布式计算API (1)DCOM的作用 在.net平台发布之前,DCOM(分布式组件对象模型)是微软相关开发人员可以选择的远程API。使用DCOM,我们可以使用COM对象、系统注册表(以及大量体力劳动)来构建分布式系统。D...
阅读全文
摘要:C#支持内联处理事件,通过直接把一段代码语句赋值给事件(使用匿名方法),而不是构建被底层委托调用的独立方法。Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.net委托类型的使用。 为了对Lambda表达式的研究做准备,先看如下program类型的新方法:static void AnonymousMethodSyntax(){ //建立整数列表 List list=new List(); list.AddRange(new int[]{20,1,4,8,9,44}); //现在使用匿名方法 List evenNumbers=list.FindAll...
阅读全文
摘要:我们可以对Car类型做最后一步改进,以符合asp.net里的事件模式。查看基类库中某个类型发送的事件时,会发同底层委托的第一个参数是一个System.Object,第二个参数是一个派生自System.Eventargs的类型。System.Object参数表示不念旧恶对发送事件的对象(例子如Car对象)的引用,第二个参数则表示与该事件相关的信息。System.Eventargs基类表示一个不发送任何自定义信息的事件:public class EventArgs{ public static readonly System.EventArgs Empty; public Even...
阅读全文
摘要:委托确实是一个有趣的结构,它允许内存中的对象进行双向对话。然而,你可能会同意,从头使用委托会有一些重复代码(定义托委,声明必要的成员变量,以及创建自定义的注册/注销方法来保护封装等)。 除了时间之外,这样使用委托来作为应用程序的回调机制会有另一个问题是:如果我们没有反委托成员变量定义为私有的,调用者就可以直接访问委托对象。这样,调用者就可以把变量赋值为新的委托对象(实际上也就删除了当前要调用的方法列表),更糟糕的是,调用者可以直接调用委托的调用列表。为说明这个问题请看如下代码:public class Car{ //一个委托 public delegate void Expl...
阅读全文
摘要:复杂的委托示例 为了说明更高级的委托使用方法,首先创建一个名为CarGarage的控制台应用程序项目,其中必须包含Car/Radio类型。让我们修改Car类使之包含两个新的布尔成员变量。一个用来决定是否应该洗车(isDirty);另一个表示该汽车是否需要互换轮胎(shouldRotate)。为了便于对象用户使用新的状态数据,Car类还定义了一些新属性并修改了构造函数。代码如下://修改后的Car类public class Car{ ... //我们需要清洗它吗?需要轮胎互换吗? private bool isDirty; private bool shouldRotat...
阅读全文
摘要:使用委托改造Car类型定义将通知发送给调用者的委托类型。声明Car类中每个委托类型的成员变量在Car上创建辅助函数使调用者能够指定由委托成员变量保存的方法修改Accelerate()方法以适当的情形下调用委托的调用列表。public calss Car{ //定义委托变量 public delegate void AboutToBlow(string msg); public delegate void Exploded(string msg); //定义每个委托类型的成员变量 private AboutToBlow almostDeadList; private...
阅读全文
摘要:这几天认真研究了C#的委托与事件,下面对研究的知识总结一下,N年后找出来看一下应该也不错。 历史上,Windows API经常使用C语言风格的函数指针来创建称为回调函数或简称为回调的实体。使用回调,码农可以使一个函数返回报告给(即回调)程序中的另一个函数。 在.NET Framework里,回调仍是可能的,它们的功能是由使用更为安全和面向对象的委托(delegate)来完成的。本质上来讲,委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。委托类型包含3个得要的信息:它所调用的方法的名称;该方法的参数(可选);该方法的返回值(可选); 当一个委托被创建并提供...
阅读全文