C# 委托(Delegate)和事件(Event)

这篇博客详细介绍了C#中的委托(Delegate)和事件(Event)。委托是一种类,继承自System.MulticastDelegate,允许将多个方法链接到同一变量并顺序执行。文章讨论了委托的调用、多播委托及其返回值,展示了委托在实际问题中的应用。事件则是带有event关键字的委托实例,其访问受到限制,只能在声明它的类中使用。文章还比较了委托和事件的区别,强调了事件不可在外部直接操作。最后,通过实例说明了如何使用委托来提高代码的可维护性。
摘要由CSDN通过智能技术生成

C# 委托(Delegate)和事件(Event)

委托:是一个类,继承自System.MulticastDelegate,里面内置了几个方法。
委托可以写在类里面,也可以写在类的外面。

	// 委托可以写在类的外面
	public delegate void NoReturnNoParaOutClass();
	public class MyDelegate
	{
   
		// 也可以写在类里面
		public delegate void NoReturnNoPara<T>(T t);
        public delegate void NoReturnNoPara();
        public delegate void NoReturnWithPara(int x, int y);//1 声明委托
        public delegate int WithReturnNoPara();
        public delegate string WithReturnWithPara(out int x, ref int y);
	}

委托的调用:

	// 假设存在方法 DoNothing
	private void DoNothing()
    {
   
        Console.WriteLine("This is DoNothing");
    }
	private int GetSomething()
    {
   
        return 1;
    }
    private int GetSomething2()
    {
   
        return 2;
    }

    private int GetSomething3()
    {
   
        return 3;
    }
	
 	public void Show()
    {
   
    	// 1. 无参数,无返回值的调用
    	{
   
    		//把方法包装成对象,invoke的时候自动执行方法
		    NoReturnNoPara method = new NoReturnNoPara(this.DoNothing);//2 委托的实例化
		    method.Invoke();//3 委托实例的调用
		    method();//等同于 method.Invoke();
			
			// 下面是不用委托,直接调用方法
		    this.DoNothing();
		}
		
		// 无参数有返回值的调用
		{
   
			WithReturnNoPara method = new WithReturnNoPara(this.GetSomething);
			// 获取返回值
            int iResult = method.Invoke();
            // 这样写也可以
            iResult = method();
            //异步调用方式
            var result = method.BeginInvoke(null, null);
            //  当使用BeginInvoke异步调用方法时,如果方法未执行完,EndInvoke方法就会一直阻塞,直到被调用的方法执行完毕。
            method.EndInvoke(result);
		}
		
		//多种途径实例化
        {
   
        	{
   
        		// 传递当前实例的普通方法
            	NoReturnNoPara method = new NoReturnNoPara(this.DoNothing);
	        }
	        {
   
	        	// 传递当前实例的静态方法
	            NoReturnNoPara method = new NoReturnNoPara(DoNothingStatic);
	        }
	        {
   
	        	// 传递外部的静态方法
	            NoReturnNoPara method = new NoReturnNoPara(Student.StudyAdvanced);
	        }
	        {
   
	        	// 传递外部的方法
	            NoReturnNoPara method = new NoReturnNoPara(new Student().Study)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值