在C#中处理委托

构成委托的要素
1、委托原形声明。例如:public delegate void FreeBack(string s);
2、委托链变量。  FreeBack freeBackChains=null;
3、与委托原形中指定的回调方法具有相容签名的静态或实例方法。
   相容签名是指,方法的返回值和委托的返回类型相同或是是其派生类型(称为协变),
   或者方法的参数与委托的参数类型相同或者是其基类(称为反协变)
   public static void WriteToConsle(string s){
   }
   public class class1{
     public class1(){
     }
     public void WriteToFile(string s){
     }
   }
4、将方法添加到(或从中删除)委托链的方法。
   FreeBack f1=new FreeBack(writeToConsle);
   class1 c1=new class1();
   FreeBack f2=new FreeBack(c1.WriteToFile);
   //添加委托方法到委托链的两种方法
   freeBackChains+=f1;
   freeBackChains=(FreeBack) Delegate.Combine(freeBackChains,f2);
   //从委托链删除委托方法的中方法
   freeBackChians-=f1;
   freeBackChians=(FreeBack) Delegate.Remove(f2);
4、调用委托链的方法,执行委托链中的每一个方法。
   可以用三种方法调用委托链中的方法:
   a)委托链变量(参数);顺序执行委托链中的方法;
   b)委托链变量.Invoke(参数);和a)没有本质区别,顺序执行委托链中的方法;
   c)委托链变量.GetInvocationList();返回Delegate[]类型,可自行处理委托链中的方法
   void Do(string s,FreeBack chain){
     chian(s);
   }
示例代码:
using System;
using System.Collections;
using System.IO;
public class MyClass
{
 //委托声明
    internal delegate void FreeBack(string s);
 public static void WriteToConsle(string s){
  WL("WriteToConsle "+s);
    }
 public static void Main()
 {
  string s="Hellow Delegate";
  FreeBack freeBackChains=null;
  FreeBack f1=new FreeBack(WriteToConsle);
  class1 c1=new class1();
  FreeBack f2=new FreeBack(c1.WriteToFile);
  //添加委托方法到委托链的两种方法
  freeBackChains+=f1;
  freeBackChains=(FreeBack) Delegate.Combine(freeBackChains,f2);
  freeBackChains(s);
  WL("----Remove one");
  freeBackChains-=f1;
  freeBackChains(s);
  RL();
 }
 
 #region Helper methods

 public static void WL(object text, params object[] args)
 {
  Console.WriteLine(text.ToString(), args); 
 }
 
 private static void RL()
 {
  Console.ReadLine(); 
 }
 
 private static void Break()
 {
  System.Diagnostics.Debugger.Break();
 }

 #endregion
}
public class class1{
     public class1(){
     }
     public void WriteToFile(string s){
     MyClass.WL("WriteToFile "+s);
     }
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值