C#委託的基礎理解

本文參考自: 原文地址

學習C#語言到了委託事件這塊就感覺比較抽象,因而做筆記方便理解。

委託:函數的包裝,讓函數可以作爲參數進行使用(C++裏的函數指針)。 

委託一個重要的作用是實現方法回調,使得我們在添加方法時更利於拓展,而不用頻繁修改邏輯判斷部分

namespace weituo{

	//定義委託 - 訪問修飾符 delegate 返回值類型 委託名(參數列表);
	public delegate void Something(string name); 

	public class Student{
		//可以像普通類型一樣當做方法參數傳遞
		public void Do(Something something){
			//可以像普通方法一樣調用
			//真正調用了方法A - 方法回調
			something(name);
		}

		public Student(string name){
			this.name = name;
		}

		private string name;
	}

	public class Teacher{
		public void Hungry(){
			Student s = new Student("老王");
			//創建委託變量
			Something a = new Something(A);
			Something b = new Something(B);
			Something c = a + b;
			委託對象可以使用+ - 來綁定、解除綁定其他委託變量
			c = c - a;
			s.Do(c);
		}

		public void A(sting name){
			Console.WriteLine("Hello,"+name);
		}

		public void B(sting name){
			Console.WriteLine(name+"爲老師買早飯");
		}

	}

	class MainClass{
		public static void Main(string[] args){
			Teacher t = new Teacher();
			t.Hungry();
		}
	}

}

上述例子,1、將委託作爲參數封裝在學生的Do(Something something)函數中,如此,2、老師若要學生完成指定的A或B方法,便可以將老師的函數直接傳遞過去A(string name)、B(string name)。

概括下即:老師餓了(Hungry),在Hungry函數中通過創建的委託變量,修改增添AB方法,並傳遞到學生已封裝好的帶有委託傳遞的Do函數裏,最後調用老師的AB方法(方法回調),學生就爲老師買好了早飯。

namespace weituo1{

	 class Person{
		public  delegate int MyDelegate(int num1,int num2);

		public int Compare(int n1,int n2){
			return n1 > n2 ? n1 : n2;
		}

		public void func(MyDelegate dd,int nn1,int nn2){
			int result = dd(nn1,nn2);
			Console.WriteLine(result);
		}
	}

	class MainClass{
		public static void Main (string[] args){
			Person p = new Person();
			p.func(p.Compare,10,20);
	}

}

上述案例更簡潔,我們在Main類中負責比較兩個人的年齡,那麼首先調用person類裏的func函數,由func再負責傳遞compare函數,我們也可以新增其他函數傳遞,用來比較兩個人的其他關係。

以上就是最近學習委託的一點心得,實際運用仍需更多案例








發佈了39 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章