C#委托 - 学习笔记

来源(参考)

C#委托-百度百科

个人理解

我尽量的将其转为我可以理解的形式并做记录

委托的意义

委托,是一个,它通过定义一些方法的类型,从而使得可以将这些方法当作另一个方法的参数来进行传递,从而避免在程序中大量使用If-Else(Switch)语句,使程序具有更好的可扩展性

委托的定义

一个简单的定义是:

namespace ... {
	//定义在调用范围之外
	//这样的定义,定义了一个返回类型为void,而参数为string的委托
	//当对它做委托的时候,传入的函数参数,应该符合上述的类型
	public delegate void Func(string name);
	
	class ... {
	
	}
}

而基于这样的定义其使用实例可以借用引用文章中的例子:

using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate
{
    //定义委托,它定义了可以代表的方法的类型
    public delegate void GreetingDelegate(string name);
    class Program
    {
        private static void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning, " + name);
        }
        private static void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好, " + name);
        }
        //注意此方法,它接受一个GreetingDelegate类型的参数,该参数是返回值为空,参数为string类型的方法
        private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
        {
            MakeGreeting(name);
        }
        static void Main(string[] args)
        {
            GreetPeople("Jimmy Zhang", EnglishGreeting);
            GreetPeople("张子阳", ChineseGreeting);
            Console.ReadKey();
        }
    }
}

一个稍微复杂的定义:(将委托放入一个类中,以符合封装性)

namespace ...{
	public class Dele{
		private int index;
		//声明委托
		public delegate void FuncEventHandler(Object sender, FuncEventArgs e);
		//声明事件
		public event FuncEventHandler Func;
		//定义一个类,这个类会传递给Observer其感兴趣的信息
		public class FuncEventArgs : EventArgs{
			public readonly int index;
			public FuncEventArgs(int index){
				this.index = index;
			}
		}
		// 可以提供给继承类来做重写,以便继承类拒绝其他对象对它的监视
        protected virtual void OnFunc(BoiledEventArgs e)
        {
            if (Func != null)
            { 
            	// 如果有对象注册
                Func(this, e); // 调用所有注册对象的方法
            }
        }
		
		//做事情
		public void FuncDoing()
		{
			int temp = 1;
			FuncEventArgs f = new FuncEventArgs(temp)
		}
	}

	class Program{
		//实例化
		Dele d = new Dele();
		//注册
		d.Func += FirstFunction;
		//匿名注册
		d.Func += (new 一个类).Function;
		//静态注册
		d.Func += 一个类.Function;

		d.OnFunc();//会自动调用注册过的方法。
	}
}

事件

我对委托中的事件的理解是,将声明的委托,当作是属性,托管给声明的事件。
这样,只要被注册的函数和委托声明的类型参数一致,事件会帮助完成注册这件事,从而不需要设置额外的操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值