标签:
首先要知道委托是什么,委托实际上就相当于C语言中的函数指针
一 声明委托
示例:delegate void StringProcessor(string input);
这是一个返回值为空的委托声明,其中声明的参数必须是string 类型,同时比较写出返回类型(这个类型必须与委托指向的方法的返回值的类型一致);
二 创建委托示例
示例 :
 jonProcessor = new StringProcessor(jon.Say);
            tomProcessor = new StringProcessor(tom.Say);
            backgroung = new StringProcessor(Background.Note);
如果委托操作的是静态方法,直接操作就行了,如果委托操作的实例的方法则必须先创建该方法所在的实例
(注:假如委托实例本身不能被收回,委托实例会阻止它的目标被作为垃圾回收,这可能造成明显的内存泄露(leak))
三 调用委托
示例:
void Invke(string input);
只需要传入方法原版需要的参数就可以调用委托实例
四 完整的例子
using System;
namespace ConsoleApplication1
{
    delegate void StringProcessor(string input);
    class Perosn
    {
        string name;
        public Perosn(string name) { this.name = name; }
        public void Say( string message)
        {
            Console.WriteLine("{0} says: {1}",name,message);
        }
    }
    class Background
    {
        public static void Note(string note)
        {
            Console.WriteLine("({0})", note);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Perosn jon = new Perosn("Json");
            Perosn tom = new Perosn("Tom");
            StringProcessor jonProcessor, tomProcessor, backgroung;
            jonProcessor = new StringProcessor(jon.Say);
            tomProcessor = new StringProcessor(tom.Say);
            backgroung = new StringProcessor(Background.Note);
            jonProcessor("Hi!son!");
            tomProcessor.Invoke("Hi!Daddy");
            backgroung("An airplane flies past!");
        }
    }
}
标签:
原文地址:http://www.cnblogs.com/NEAVERS/p/4319459.html