ms_dos

  博客园  :: 首页  :: 新随笔  ::  :: 订阅 订阅  :: 管理
c# 中,取消了c和c++中使用最灵活,也是最难掌握的指针。那么在c#中如何提供c/c++中的函数指针的功能?c#提供了委托(delegate),委托是继承自System.Delegate类的引用类型。它相当于函数指针原型。与函数指针不同的是,委托在c#中是类型安全的,委托特别适合于匿名调用。要使用委托需经过三个步骤,即声明、实例化、调用。
    using System;
    //声明一个名为mfDelegate的委托,该委托有一个string类型的参数
    //c#编译器编译时会产生一个新类,该类继承自System.Delegate,类
    //名为mfDelegate
    public delegate void mfDelegate(string name);
   
    public class Hello Word
    {
    //定义与mfDelegate有相同参数类型的方法Hello()
    public static void Hello(string name)
    {
    Console.WriteLine("您好,{0}!",name);
    }
    //定义与mfDelegate有相同参数类型的方法GoodBye()
    public static void GoodBye(string name)
    {
    Console.WriteLine("再见,{0}!",name);
    }
    public static void Main()
    {
    //创建一个mfDelegate实例 mf1
    mfDelegate mf1=new mfDelegate(Hello);
    //调用mf1
    mf1("Hello Word");
    mfDelegate mf2=new mfDelegate(GoodBye);
    mf2("Hello Word");
    //将mf1 mf2组合成一个新的委托mf3
    mfDelegate mf3=mf1+mf2;
    //调用mf3
    mf3("程序员");
    //从组合的委托mf3中删除mf1
    mfDelegate mf4=mf3-mf1;
    mf4("Hello Word");
    }
    }
 

 程序结果:您好,Hello Word!//mf1; 再见,Hello Word!//mf2
   您好,程序员! 再见,程序员!//mf3
   再见,Hello Word!//mf4

posted on 2007-06-16 16:58  ms_dos  阅读(1728)  评论(0编辑  收藏  举报