1. 程式人生 > >【C#】delegate委託的定義和使用方法

【C#】delegate委託的定義和使用方法

using System;

namespace delegate委託的定義和使用方法
{
	




	class MainClass
	{

		//【1】 定義一個返回值是string,無引數的委託型別
		public delegate string GetAstring ();




		// ------------------------------------------------------------------------
		// 【2】定義一個無引數,無返回值的委託
		public delegate void  WriteString ();
		// 【2】把委託型別作為方法的引數
		static void Write (WriteString printFunction)
		{
			// 呼叫委託中所有的方法
			printFunction ();
		}

		static void WriteTest1 ()
		{
			Console.WriteLine ("可以把方法1作為引數傳遞");
		}

		static void WriteTest2 ()
		{
			Console.WriteLine ("可以把方法2作為引數傳遞");
		}
		// ------------------------------------------------------------------------


		public static void Main (string[] args)
		{
			//【1】--------------------委託變數賦值的兩種方式------------------------
			int age = 18;
			//【1】-----------------------第一種賦值方式----------------------------
			// getString指向age中的ToString方法
			// new的時候括號裡必須帶有一個,無引數,返回值是string型別的方法
			// 根據上面的delegate型別可判斷引數方法的型別
			GetAstring getString = new GetAstring (age.ToString);

			// +=:表示這個委託裡又追加了一個方法,委託了2個ToString方法,還可以追加更多
			getString += age.ToString;


			// 通過委託的例項去呼叫委託裡的方法
			string result = getString ();
			Console.WriteLine ("result: " + result);



			//【1】-----------------------第二種賦值方式----------------------------

			GetAstring getString2 = age.ToString;
			string result2 = getString2 ();
			Console.WriteLine ("restlt2: " + result2);






			//【2】---------------------------------------------------------------

			WriteString test = WriteTest1;
			test += WriteTest2;
			test += WriteTest2;
			/*  輸出結果
			可以把方法1作為引數傳遞
			可以把方法2作為引數傳遞
			可以把方法2作為引數傳遞
			*/
			Write (test);


		}


	}
}