委托的用法

 1.委托介绍

        委托(delegate)类似于c++中的指针,是存有对某个方法的引用的引用类型变量。使用委托都是先定义一个方法,然后把方法给委托的实例。接口是类的抽象,类是对象模板, 委托是方法的抽,。接口可以实现类的多态,委托可以实现方法的多态。当我们想调用某个具体方法时,不用直接调用这个方法,而是调用这个委托。我们需要在方法和委托中建立联系。委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。

2.委托的使用

        实现一个delegate是很简单的,通过以下3个步骤即可实现一个delegate:
1. 声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。
2. 创建delegate对象,并"将你想要传递的函数作为参数传入"。
3. 在要实现异步调用的地方,通过上一步创建的对象来调用方法。

3.委托demo

demo01

using System;

public class MyDelegateTest
{
    // 步骤1,声明delegate对象
    public delegate void MyDelegate(string name);

    // 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型
    public static void MyDelegateFunc(string name)
    {
        Console.WriteLine("Hello, "+ name);
    }
    public static void Main()
    {
        // 步骤2,创建delegate对象
        MyDelegate md = MyDelegateFunc;
        // 步骤3,调用delegate
        md("tom");
    }
}

demo02

  class Program
    {

        delegate void IntMethodInvoker(int x);
        //定义委托,参数和返回值类型相同的方法都可以交给委托来调用

   
        static void Main(string[] args)
        {
            IntMethodInvoker invoker = null;
            //使用委托声明变量,委托可以引用其他方法,null表示目前没有引用任何方法

            invoker = test;
            //同一个类中的静态方法(static)可以直接调用,访问另外类中的方法要加上类名。

            invoker(100);
            //本身是一个变量却能直接当方法调用 ,把test方法把自身的调用委托给invoker。

        }

        private static void test(int x){

            Console.WriteLine("我是test方法"+ x);
        }
    }

demo03

namespace 委托
{
    public delegate void SayHelloDlg(string name);
    //在类外声明一个无返回值,参数为sring的委托
    class Program
    {
        public static event SayHelloDlg SayHelloEvent;
        //声明一个SayHelloDlg类型的事件
        static void Main(string[] args)
        {
            SayHelloDlg dlg = SayHello;
            //实例化委托并引用SayHello方法
            dlg += SayHello;
            dlg("xiaoyang");
            //委托的解释:将方法以变量的形式传递,并且以方法的形式执行。

            SayHelloEvent += Program_SayHelloEvent;
            //注册事件,这个事件会通知到Program_SayHelloEvent方法。
            if (SayHelloEvent !=null)
            {
                SayHelloEvent("xiaoyang");

                Console.ReadKey();
            }
            
        }

        private static void Program_SayHelloEvent(string name)
        {
            Console.WriteLine(name+"我是事件");
        }

        public static void SayHello(string name) {
            Console.WriteLine(name+"你好");
        }

        public static void SayGoodby(string name) {
            Console.WriteLine(name+"再见");
        }

        
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值