delegate类型
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类型相关推荐
- 使用delegate类型设计自定义事件
在C#编程中,除了Method和Property,任何Class都可以有自己的事件(Event). 定义和使用自定义事件的步骤如下: (1)在Class之外定义一个delegate类型,用于确定事件程 ...
- C#学习基本概念之关键字---delegate(委托)
委托类型的声明与方法签名相似, 有一个返回值和任意数目任意类型的参数: public delegate void TestDelegate(string message); public deleg ...
- Delegate成员变量和Event的区别
上周五有同事问了我一个问题:Delegate和Event有什么区别?具体来说在设计一个类的时候,声明一个事件(Event)和声明一个Delegate类型的成员变量有啥区别. 我的第一反应是没啥区别,虽 ...
- delegate委托
delegate委托: 三个概念: C# 中的委托类似于 C 或 C++ 中的函数指针. 委托是面向对象.类型安全的,并且是安全的. 委托和接口的类似之处是:它们都允许分隔规范和实现. 一个原则: 被 ...
- C# delegate event
最近一直在学习C#的Delegate机制,总结在这里,以供大家参考. 参考资料: http://www.akadia.com/services/dotnet_delegates_and_events. ...
- Csharp关键字----delegate(委托)
Delegate类简介 ------------------------ 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 委托(Delegate)类是一 ...
- 转:终于会用c#中的delegate(委托)和event(事件)了
第一个例子: public class DelegateTest {// 声明delegate对象 public delegate void CompareDelegate(int a,int b); ...
- 不具有继承关系的Delegate如何进行类型转换?
- 引自:Artech 我们知道对于两个不具有继承关系的两个类型,如果没有为它们定义转换器,两这之间的类型转换是不允许的,Delegate也是如此.但是有时候我们却希望"兼容"的两 ...
- C#3.0笔记(一)预备知识之Delegate
在学习C#3.0之前还是先来回顾下委托.事件,因为这样能更加有助于理解C#3.0里面的一些新的特性,如Lambada表达式等. 背景 在C语言中我们可以用函数指针来创建回调函数,但是在C里面回调函数存 ...
最新文章
- 新型混合共识机制及抗量子特性的 Hcash 主链测试链即将上线
- 600页!分享珍藏很久的《推荐系统学习手册》(附链接)
- python中yield函数的作用?
- html语言中,定义文档中一个正在打开的链接的颜色的代码是,2017微软认证考试精选练习(附答案)...
- 在长文本中当中使用正则表达式匹配限定长度范围的数字串的方法
- 关于JSON CSRF的一些思考
- WPF入门教程系列十三——依赖属性(三)
- bash mysql 循环输出_Bash实用技巧:同时循环两个列表
- Redis进阶实践之十八 使用管道模式提高Redis查询的速度
- 信息发布系统 Jquery+MVC架构开发(6)BLL层提供WCF 服务 .
- Android ConnectivityManager详解
- Android入门笔记10
- 爱心宠物诊所管理系统
- 研究生毕业做软件测试,毕业研究生,转学软件测试月薪11K,会做选择的人生到底有多赚?...
- Java打造RPC框架(二):11个类实现简单Java RPC
- SoK: The Faults in our ASRs: An Overview of Attacks against Automatic Speech Recognition (题目过长)阅读笔记
- TCP的三次握手与四次挥手基本理解
- 集合框架及ArrayList、LinkedList源码的个人理解
- SLAM论文阅读:M-Loam:具有在线外参校准功能的多LiDAR系统的稳健里程表和建图
- 浪漫行星,不浪漫你打我
热门文章
- 基于java的水费管理系统
- Android布局深究(六)——AbsoluteLayout(绝对布局)
- maven项目搭建步骤
- 在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法,去掉数值相同的元素,使得表中不再有重复的元素。
- kali linux超级用户_Kali Linux操作系统将从本月发布的新版本开始默认不再使用root账户...
- SharedObject对象聊天室
- antd table 设置固定高度
- 论文阅读:Visual Relationship Detection with Language Priors
- 聆听喳倩老师诵读「红楼梦赏析」号首发沙木木君,于二零一九年七月七日编创的新博文
- SparkCore入门编程