C#委托与事件之----委托

C#委托与事件之委托

整理了一下委托的几种使用方法,都在代码里面了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegateAndEvent
{
    class Program
    {
        /*以下是委托类型的定义形式*/
        //定义了一个委托类型,这个委托类型的名字是GetAString,他可以指向一个参数为空,返回值为string的方法.
        private delegate string GetAString(); //无参有返
        private delegate void PrintString(); //无参无返
        public delegate void GreetingDelegate(string name); //有参无返

        static void Main(string[] args)
        {
            int x = 40;
            int y = 50;
            string name1 = "小包子";
            string name2 = "小饼干";

            //*1.第一种使用方法 : new一个委托实例.
            //实例化一个委托类型,类似于实例化一个类,在实例化的过程中需要传递进去一个方法作为参数.
            //a指向了x.ToString()方法.
                //------例一
            GetAString a = new GetAString(x.ToString);
            string s = a();//通过委托实例去调用方法.
                //------例二(写法一)
            GreetingDelegate delegate4;
            delegate4 = EnglishGreet;
            delegate4 += ChineseGreet;
            delegate4("小面包");//委托实例直接调用方法.
                //------例二(写法二)
            GreetingDelegate delegate5 = new GreetingDelegate(ChineseGreet);
            delegate5 += EnglishGreet;   


            //*2.第二种使用方法 : 给委托对象赋值(绑定)方法.
                //--------例一
            GetAString b = y.ToString;
            string s1 = b.Invoke();
                //--------例二
            GreetingDelegate delegate1, delegate2;
            delegate1 = ChineseGreet;
            delegate2 = EnglishGreet;
            GreetPeople(name1, delegate1);
            GreetPeople(name2, delegate2);
                //--------例三 : 同一个委托绑定多个方法
            GreetingDelegate delegate3;
            delegate3 = ChineseGreet;
            delegate3 += EnglishGreet;
            GreetPeople(name2,delegate3);//将依次调用先后被绑定上去的两个方法.
                

            //3.第三种使用方法:把委托类型对象当成一个参数来使用.
            PrintString print=TestMethod1;
            PrintStr(print);//print:Method1

            //4.把方法作为参数的直接体现.
            GreetPeople("花花", ChineseGreet);//print:你好,花花.
            GreetPeople("huahua", EnglishGreet);//print:Hello,花花.

            Console.WriteLine(s);//print:s=40
            Console.WriteLine(s1);//print:s1=50
            Console.ReadKey();
        }

        static void PrintStr(PrintString print)
        {
            print();//相当于调用了GetAString类型的.
        }

        static void TestMethod1()
        {
            Console.WriteLine("Method1");
        }

        //该方法为核心方法,它接收一个GreetingDelegate类型的方法作为参数.
        static void GreetPeople(string name,GreetingDelegate MakeGreeting)
        {
            MakeGreeting(name);
        }

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

        static void EnglishGreet(string name)
        {
            Console.WriteLine("Hello," + name);
        }
    }
}

此篇只是整理留作个人复习使用,下面这篇博文是我个人觉得对委托与事件讲解的非常透彻的一位大牛的分享,连接奉上:http://www.tracefact.net/tech/009.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值