【C#语法-01】

委托

什么是委托

委托是一种引用类型,它是函数指针的托管版本。在C#中,委托是一种可以把引用存储为函数的类型。委托可以引用实例和静态方法,而函数指针只能引用静态方法。委托的声明非常类似于函数,和函数不同的的是委托不带函数体,并且需要Delegate关键字。委托的声明指定了一个函数签名,其中包含参数列表和和一个返回类型。在定义了委托后,就可以声明该委托类型的变量,然后可以将这个变量初始化为与该委托有相同签名的函数进行引用,随后可以使用委托变量调用该函数。

委托虽然与函数指针非常相似,但却不是指针。许多人把.NET中的委托理解为安全的函数指针,这是比较牵强的,委托实现的功能和函数指针非常类似的一点就是提供了程序回调机制。

流程

1、声明委托类型
2、有一个方法包含了执行的代码
3、创建委托实例
4、调用委托实例

using System;

namespace ConsoleApp
{
   class Program
    {
        delegate void MyDelegate();
        static void Main(string[] args)
        {
            MyDelegate myDelegate = Method1;//委托静态方法Method1
            myDelegate += new Program().Method2;//委托实例方法Method2
            myDelegate.Invoke();//调用委托链上的所有方法

            Console.ReadKey();
        }
        static void Method1() {
            Console.WriteLine("method1 invoked");
        }
        void Method2() {
            Console.WriteLine("method2 invoked");
        }
    }
}

事件

事件就是一个特殊的委托,是对委托做了一个封装。

声明事件

//public   event  委托名     事件名称
public   event   MyDelegate  EventMyDel;
using System;
 
namespace ConsoleApp1
{
    public class PublishEvent
    {
        public delegate void NoticeHandler(string message);
        public event NoticeHandler NoticeEvent;
        public void Works()
        {
            //触发事件
            if (NoticeEvent != null)
            {
                //传递事件及参数
                NoticeEvent("Notice发布的报警信息!");
            }
        }
    }
    
    public class SubscribEvent
    {
        public SubscribEvent(PublishEvent pub)
        {
            //添加处理函数到委托链
            pub.NoticeEvent += PrintResult;
        }
      
        void PrintResult(string message)
        {
            Console.WriteLine(string.Format("HELLO WORLD"));
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            PublishEvent publish = new PublishEvent();
            SubscribEvent subscrib = new SubscribEvent(publish);
            //触发事件
            publish.Works();
            Console.Read();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值