delegate 类型

若要使用一个delegate类型,并要动态地决定欲调用的方法,可以遵照下面的步骤来完成:

步骤一:声明delegate类型的函数样板。

步骤二:定义欲调用的方法。

步骤三:定义delegate类型处理函数,使用delegate。

步骤四:建立delegate类型实体,传入欲调用的方法名称。

步骤五:将程序代码链接起来运作。

在这个范例中,将在HumanResoruce类下建立两个方法aFunction与bFunction。并通过delegate类型,动态地调用这两个方法。

delegate程序代码列表

using System;

namespace UCOM.HR

{

public delegate string FunctionPoiter(string Name);

public class HumanResource

{

public static string aFunction(string Name)

{

return "A Say Hello To " +Name;

}

public static string bFunction(string Name)

{

return "B Say Hello To " +Name;

}

public static void aMethod(FunctionPointer aFunctionPointer)

{

Console.WriteLine(aFunctionPointer("Miles"));

}

public static int Main()

{

FunctionPointer a = new FunctionPointer(aFunction);

FunctionPointer b = new FunctionPointer(bFunction);

aMethod(a);

aMethod(b);

}

}

}

delegate事件

事件(Event)就是一个回呼(callbak)的函数指针(Function Pointer),在C#中通过delegate达成。

事件有两个角色:

事件发行者(Publisher):也称传送者(Sender),其实就是一个对象,这个对象会自行维护本身的状态信息。当本身的状态信息变动时,便触发一个事件,并通知所有的事件订阅者。

事件订阅者(Subscriber):对事件感兴趣的对象,也称为接收者(Receiver),可以注册感兴趣的事件处理常式,在事件发行者触发一个事件后,会自动执行这段程序代码的内容。

事件范例

范例中包含两个类,一为Employee类,一为HumaneRsource类。

程序清单

using System;

namespace UCOM.HR

{

public delegate void ComputeSalaryCallback(string EmpID,double Salary);

public class Employee

{

public event ComputerSalaryCallback OnComputeSalaryDone;

...

public Employee(string EmpID,double BaseSalary)

{

mstrEmpID = EmpID;

mdblBaseSalary = BaseSalary;

}

public virtual double ComputeSalary()

{

OnComputeSalaryDone(mstrEmpID,mdblBaseSalary);

return mdblBaseSalary;

}

...

}

public class HumanResource()

{

public static void SalaryHandler(string EmpID,double Salary)

{

Console.WriteLine("员工:员工代号={0}。薪资={1}",EmpID,Salary);

}

public static int Main()

{

Employee e1 = new Employee("001",5000);

e1.OnComputeSalaryDone +=new ComputeSalaryCallback(SalaryHandler);

e1.ComputeSalary();

return 0 ;

}

}

}

delegate类型相关推荐

  1. 使用delegate类型设计自定义事件

    在C#编程中,除了Method和Property,任何Class都可以有自己的事件(Event). 定义和使用自定义事件的步骤如下: (1)在Class之外定义一个delegate类型,用于确定事件程 ...

  2. C#学习基本概念之关键字---delegate(委托)

    委托类型的声明与方法签名相似,  有一个返回值和任意数目任意类型的参数: public delegate void TestDelegate(string message); public deleg ...

  3. Delegate成员变量和Event的区别

    上周五有同事问了我一个问题:Delegate和Event有什么区别?具体来说在设计一个类的时候,声明一个事件(Event)和声明一个Delegate类型的成员变量有啥区别. 我的第一反应是没啥区别,虽 ...

  4. delegate委托

    delegate委托: 三个概念: C# 中的委托类似于 C 或 C++ 中的函数指针. 委托是面向对象.类型安全的,并且是安全的. 委托和接口的类似之处是:它们都允许分隔规范和实现. 一个原则: 被 ...

  5. C# delegate event

    最近一直在学习C#的Delegate机制,总结在这里,以供大家参考. 参考资料: http://www.akadia.com/services/dotnet_delegates_and_events. ...

  6. Csharp关键字----delegate(委托)

    Delegate类简介 ------------------------      命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 委托(Delegate)类是一 ...

  7. 转:终于会用c#中的delegate(委托)和event(事件)了

    第一个例子: public class DelegateTest {// 声明delegate对象 public delegate void CompareDelegate(int a,int b); ...

  8. 不具有继承关系的Delegate如何进行类型转换?

    - 引自:Artech 我们知道对于两个不具有继承关系的两个类型,如果没有为它们定义转换器,两这之间的类型转换是不允许的,Delegate也是如此.但是有时候我们却希望"兼容"的两 ...

  9. C#3.0笔记(一)预备知识之Delegate

    在学习C#3.0之前还是先来回顾下委托.事件,因为这样能更加有助于理解C#3.0里面的一些新的特性,如Lambada表达式等. 背景 在C语言中我们可以用函数指针来创建回调函数,但是在C里面回调函数存 ...

最新文章

  1. 新型混合共识机制及抗量子特性的 Hcash 主链测试链即将上线
  2. 600页!分享珍藏很久的《推荐系统学习手册》(附链接)
  3. python中yield函数的作用?
  4. html语言中,定义文档中一个正在打开的链接的颜色的代码是,2017微软认证考试精选练习(附答案)...
  5. 在长文本中当中使用正则表达式匹配限定长度范围的数字串的方法
  6. 关于JSON CSRF的一些思考
  7. WPF入门教程系列十三——依赖属性(三)
  8. bash mysql 循环输出_Bash实用技巧:同时循环两个列表
  9. Redis进阶实践之十八 使用管道模式提高Redis查询的速度
  10. 信息发布系统 Jquery+MVC架构开发(6)BLL层提供WCF 服务 .
  11. Android ConnectivityManager详解
  12. Android入门笔记10
  13. 爱心宠物诊所管理系统
  14. 研究生毕业做软件测试,毕业研究生,转学软件测试月薪11K,会做选择的人生到底有多赚?...
  15. Java打造RPC框架(二):11个类实现简单Java RPC
  16. SoK: The Faults in our ASRs: An Overview of Attacks against Automatic Speech Recognition (题目过长)阅读笔记
  17. TCP的三次握手与四次挥手基本理解
  18. 集合框架及ArrayList、LinkedList源码的个人理解
  19. SLAM论文阅读:M-Loam:具有在线外参校准功能的多LiDAR系统的稳健里程表和建图
  20. 浪漫行星,不浪漫你打我

热门文章

  1. 基于java的水费管理系统
  2. Android布局深究(六)——AbsoluteLayout(绝对布局)
  3. maven项目搭建步骤
  4. 在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法,去掉数值相同的元素,使得表中不再有重复的元素。
  5. kali linux超级用户_Kali Linux操作系统将从本月发布的新版本开始默认不再使用root账户...
  6. SharedObject对象聊天室
  7. antd table 设置固定高度
  8. 论文阅读:Visual Relationship Detection with Language Priors
  9. 聆听喳倩老师诵读「红楼梦赏析」号首发沙木木君,于二零一九年七月七日编创的新博文
  10. SparkCore入门编程