委托,通過delegate關鍵字來聲明,通過new,+=,-=運算符為其分配函數。
delegate void StrParaFunc(int no,string str);//定義一個委托,沒有返回值,依次包含兩個數據類型為int和string的參數
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace useDelegate
{
class Program
{
/// <summary>
/// 定義委托
/// </summary>
/// <param name="no"></param>
/// <param name="str"></param>
delegate void StrParaFunc(int no, string str);
static void PrintString(int no, string str) {
System.Console.WriteLine("{0}:PrintString:{1}",no,str);
}
static void ShowString(int no, string str)
{
System.Console.WriteLine("{0}:ShowString:{1}", no, str);
}
static void Main(string[] args)
{
//通過new初始化委托
System.Console.WriteLine("**********************");
StrParaFunc spfHandler1 = new StrParaFunc(PrintString);
System.Console.WriteLine("第一個委托對象,有1個引用函數:");
spfHandler1(1,"a string 1");//委托類型中有一個引用函數,結果有1個
System.Console.WriteLine("**********************");
spfHandler1 += ShowString;//通過+=增加引用函數
System.Console.WriteLine("第一個委托對象,增加了一個引用函數,共2個引用函數:");
spfHandler1(2,"a string 2");//委托中有兩個引用函數,結果有2個
System.Console.WriteLine("**********************");
spfHandler1 -= PrintString; //通過-=移除引用函數
System.Console.WriteLine("第一個委托對象,減少了一個引用函數,剩1個引用函數:");
spfHandler1(3, "a string 3"); //委托中有一個引用函數,結果1個
System.Console.WriteLine("**********************");
//通過函數地址直接初始化委托
StrParaFunc spfHandler2 = PrintString;
spfHandler2(4, "a string 4");
System.Console.WriteLine("**********************");
System.Console.ReadLine();
}
}
}
運行結果:
**********************
第一個委托對象,有1個引用函數:
1:PrintString:a string 1
**********************
第一個委托對象,增加了一個引用函數,共2個引用函數:
2:PrintString:a string 2
2:ShowString:a string 2
**********************
第一個委托對象,減少了一個引用函數,剩1個引用函數:
3:ShowString:a string 3
**********************
4:PrintString:a string 4
**********************
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace useDelegate
{
class Program
{
/// <summary>
/// 定義委托
/// </summary>
/// <param name="no"></param>
/// <param name="str"></param>
delegate void StrParaFunc(int no, string str);
static void PrintString(int no, string str) {
System.Console.WriteLine("{0}:PrintString:{1}",no,str);
}
static void ShowString(int no, string str)
{
System.Console.WriteLine("{0}:ShowString:{1}", no, str);
}
static void Main(string[] args)
{
//通過new初始化委托
System.Console.WriteLine("**********************");
StrParaFunc spfHandler1 = new StrParaFunc(PrintString);
System.Console.WriteLine("第一個委托對象,有1個引用函數:");
spfHandler1(1,"a string 1");//委托類型中有一個引用函數,結果有1個
System.Console.WriteLine("**********************");
spfHandler1 += ShowString;//通過+=增加引用函數
System.Console.WriteLine("第一個委托對象,增加了一個引用函數,共2個引用函數:");
spfHandler1(2,"a string 2");//委托中有兩個引用函數,結果有2個
System.Console.WriteLine("**********************");
spfHandler1 -= PrintString; //通過-=移除引用函數
System.Console.WriteLine("第一個委托對象,減少了一個引用函數,剩1個引用函數:");
spfHandler1(3, "a string 3"); //委托中有一個引用函數,結果1個
System.Console.WriteLine("**********************");
//通過函數地址直接初始化委托
StrParaFunc spfHandler2 = PrintString;
spfHandler2(4, "a string 4");
System.Console.WriteLine("**********************");
System.Console.ReadLine();
}
}
}
運行結果:
**********************
第一個委托對象,有1個引用函數:
1:PrintString:a string 1
**********************
第一個委托對象,增加了一個引用函數,共2個引用函數:
2:PrintString:a string 2
2:ShowString:a string 2
**********************
第一個委托對象,減少了一個引用函數,剩1個引用函數:
3:ShowString:a string 3
**********************
4:PrintString:a string 4
**********************