何为委托

加了delegate关键字,没有方法体{}的方法模版(方法列表);委托是一种类型

public  void Write()
{
//TODO
}
//加上关键字delegate,去掉方法体{}
public delegate void Write();

委托的使用

委托基础使用三部曲:1初始化声明的委托 2绑定定义的方法 3使用

绑定方法与声明的委托的参数签名必须一致(参数个数,对应类型,返回类型)

 class Program
{
//定义方法
public static void WriteFun()
{
//TODO
}
public static void GetFun(int y)
{
//TODO
}
public static string SetFun()
{
return "";
}
//声明委托
public delegate void Write();
public delegate void Get(int x);
public delegate string Set(); static void Main(string[] args)
{
//初始化委托,绑定方法
Write write = new Write(WriteFun);
//可简写Write write = WriteFun;
Get get = GetFun;
Set set = SetFun;
//直接使用或者用invoke()
write();//write.Invoke();
get();//get.Invoke(3);
string str = set();//string str = set.Invoke();
}
}

多播委托

上面说过委托是方法列表:委托可以一次绑定多个方法,通过+=和-=来绑定和解除绑定;

 class Program
{
public static void WriteFun()
{
//TODO
}
public static void WriteFun1()
{
//TODO
}
public static void WriteFun2()
{
//TODO
} public delegate void Write(); static void Main(string[] args)
{
Write write = WriteFun;
write += WriteFun;
write -= WriteFun;
write += WriteFun1;
write += WriteFun2;
write.Invoke();
}
}

委托和事件

委托是一种类型,事件是加了关键字event的委托实例

相比与上述的普通委托实例,事件更加特殊,它不能被初始化,且不能被外部调用

public class Button
{ public ButtonClickHandle ButtonClickHandle;
public event ButtonClickHandle ButtonClickHandleEvent; public void click()
{
if (ButtonClickHandle !=null)
{
ButtonClickHandle.Invoke();
}
if (ButtonClickHandleEvent != null)
{
ButtonClickHandleEvent.Invoke();
}
}
}
public delegate void ButtonClickHandle();

区别如下

不能被初始化和外部调用,这是一种权限控制的安全机制

PS

委托尽量不要自己去实现,一方面是官方已经提供了Func与Action两种有无返回的委托,基本够用;另一方面是,委托是一种类型,如果委托的类型过多,会造成泛滥且不能够通用

进阶

lambda表达式

出自:博客园-半路独行

原文地址:http://www.cnblogs.com/banluduxing/p/8999428.html

本文出自于http://www.cnblogs.com/banluduxing 转载请注明出处。

c#进阶之浅析委托和事件的更多相关文章

  1. C# 委托和事件高级进阶

    本篇文章主要采用理论和代码实例相结合方式来论述委托和事件,涉及到一些边界技术,如软件架构的OCP原则(开-闭原则), 软件架构解耦,设计模式(Sender-Order)和事件驱动模型,有一定难度和深度 ...

  2. C#知识体系(二)用案例来理解委托与事件

    上一篇博客讲到了LinQ和lambda的常用方法 还有很多我们未知但c#设计团队已经为我们封装好的类和方法.随着我们不断的熟悉C#语言,渐渐的就会接触到其他的知识点,委托.事件.反射.线程.同步,异步 ...

  3. C#中委托和事件

    目 录 将方法作为方法的参数 将方法绑定到委托 更好的封装性 限制类型能力 范例说明 Observer 设计模式简介 实现范例的Observer 设计模式 .NET 框架中的委托与事件 为什么委托定义 ...

  4. 关于c#中委托与事件的一些理解

    文章目的:作者(初学者)在学习c#的过程中,对事件.委托及其中的“object sender,EventArgs e”一直感觉理解不透,因此在网上找了一些资料,学习并整理出了该篇笔记,希望能将自己的心 ...

  5. .NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...

  6. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  7. [转载]C#深入分析委托与事件

    原文出处: 作者:风尘浪子 原文链接:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 同类链接:http://www.c ...

  8. [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...

  9. C#委托与事件

    一.在控制台下使用委托和事件 我们都知道,C#中有"接口"这个概念,所谓的"接口"就是定义一套标准,然后由实现类来具体实现其中的方法,所以说"接口,是 ...

随机推荐

  1. leetcode382

    /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...

  2. DDoS攻防战 (四):CC攻击防御系统部署

    1. 系统效果 此DDOS应用层防御系统已经部署在了http://www.yfdc.org网站上(如果访问失败,请直接访问位于国内的服务器http://121.42.45.55进行在线测试). 此防御 ...

  3. 一次性show 出所有配置

    cisco的全页打印显示配置信息的命令: #terminal length 0 #show run 华为和H3C的全页打印显示配置信息的命令: ]user-interface vty 0 4 ]scr ...

  4. RocketMQ初探(二)之RocketMQ3.26版本搭建(含简单Demo测试案例)

    作为一名程序猿,要敢于直面各种现实,脾气要好,心态要棒,纵使Bug虐我千百遍,我待它如初恋,方法也有千万种,一条路不行,换条路走走,方向对了,只要前行,总会上了罗马的道. Apache4.x最新版本既 ...

  5. onlevelwasloaded的调用时机

    并不是任何场景加载完成后都会触发该事件,必须使用场景加载API才能触发onlevelwasloaded函数,场景加载API如 scenemanager.loadscene等,additive模式不触发 ...

  6. 找不到 org/springframework/dao/support/PersistenceExceptionTranslator

    如果用的spring2  则原因是缺少spring-dao.jar 如果用的是spring3(我就栽这儿了) 则原因是缺少org.springframework.transaction-3.0.4.R ...

  7. java算法 第七届 蓝桥杯B组(题+答案) 8.四平方和

    8.四平方和  (程序设计) 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和.如果把0包括进去,就正好可以表示为4个数的平方和. 比如:5 = 0^2 + 0^2 + ...

  8. Perl 变量:哈希变量

    Perl 哈希变量哈希是 key/value 对的集合.Perl中哈希变量以百分号 (%) 标记开始.访问哈希元素格式:${key}. 1.创建哈希创建哈希可以通过以下两种方式: 1.为每个 key ...

  9. java基础之HashSet如何保证对象的唯一性

    首先Set集合是无序的 不可重复的 add的时候判断对象是否重复是用的equals HashSet<String> 存储String类型的数据时是可以保证数据的唯一性的 因为String类 ...

  10. 第五章 大数据平台与技术第11讲 MapReduce编程

    在大规模的数据当中,需要分发任务,需要进行分布式的并行编程.Hadoop这样一种开源的大数据分析平台. Map阶段 Reduce阶段:相同的键把它聚集到一起之后,然后通过Reduce方式把相同的键聚集 ...