delegate类型

delegate 类型

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

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

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

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

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

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

在这个范例中,将在HumanResoruce类下建立两个方法aFunctionbFunction。并通过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 ;

         }

     }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值