委托和事件

本文介绍了C#中的委托和事件的基本概念及使用方法。详细解释了如何定义和使用委托,以及如何定义和触发事件。通过实例展示了事件的订阅与发布过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

委托与事件

一、什么是委托

C#中没有指针。当我们需要在C#中使用函数指针时,我们用委托。委托是一种安全地封装方法的类型,它与 C C++ 中的函数指针类似。

一个委托可以看作是一种类型。

二、委托怎么定义和使用

定义和使用委托需要以下步骤:

1、定义一个委托

public delegate void MyDelegate(string str);

  

 

2、定义一个函数

public static void DelegateMethod(string message)

{

System.Console.WriteLine(message);

}

 

3、用定义的函数将其实例化

 MyDelegate handler = DelegateMethod;

4、调用

 handler("I’m a delegate");

三、什么是事件

事件在发生其关注的事情时用来提供通知的一种方式。例如,封装用户界面控件的类可以定义一个在用户单击该控件时发生的事件。事件使用委托来为触发时将调用的方法提供类型安全的封装。

四、事件怎么定义

 

  public class MyText

    {

        string t;

        //1、定义一个委托

        public delegate void MyDelegate(object sender, EventArgs e);

        //2、定义一个该委托的事件

        public event MyDelegate Changed;

        //3、定义一个引发该事件的函数

        protected virtual  void OnChanged(EventArgs e)

        {

            if (Changed != null)

            {

                Changed(this, e);

            }

        }

        //4、定义何时要激发这个事件

        public string text

        {

            get

            {

                return t;

            }

            set

            {

                if(t!=value)OnChanged(new EventArgs());

                t = value;

            }

        }

    }

}
 五、事件怎么使用

上面已经定义好了一个事件,下面我们使用这个事件:

   class Program

    {

        static void Main(string[] args)

        {

            MyText myText = new MyText();

            // 1、将事件处理程序添加到事件的调用列表中(即事件布线)

            myText.Changed += new MyText.MyDelegate(myText_Changed);

            string str = "";

            while (str != "quit")

            {

                Console.WriteLine("请输入一个字符串(如果不等于原来的那个,事件就激发了):");

                str = Console.ReadLine();

                myText.text = str;

            }

        }

        //2、 对Change事件处理的程序

        private static void myText_Changed(object sender, EventArgs e)

        {

            Console.WriteLine("事件激发:文字改变了");

        }

    }

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值