码迷,mamicode.com
首页 > 其他好文 > 详细

初学委托

时间:2015-03-06 23:27:48      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

首先要知道委托是什么,委托实际上就相当于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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!