Delegate
protected delegate int ClassDelegate(int x, int y);//定義委托類型及參數 static void Main(string[] args) { ClassDelegate dele = new ClassDelegate(Add);//實例化一個委托 Console.WriteLine(dele(1, 2));//調用委托 Console.ReadKey(); } static int Add(int a, int b) { return a + b; }
Action,可以傳入參數,沒有返回值的委托
方法1,調用方法
static void Main(string[] args) { Action<int, int> ac = new Action<int, int>(ShowAddResult);//實例化一個委托 ac(1, 2);//調用委托 Console.ReadKey(); } static void ShowAddResult(int a, int b) { Console.WriteLine(a + b); }
方法2,使用lambda表達式
static void Main(string[] args) { Action<int, int> ac = ((p, q) => Console.WriteLine(p + q));//實例化一個委托 ac(1, 2);//調用委托 Console.ReadKey(); }
方法3,作為參數傳
static void Main(string[] args) { Action<string> ac = (p => Console.WriteLine("我是方法1,傳入值:"+p));//實例化一個委托 Action<string> ac2 = (p => Console.WriteLine("我是方法2,傳入值:" + p));//實例化另一個委托 Test(ac, "參數1");//調用test方法,傳入委托參數 Test(ac2, "參數1");//調用test方法,傳入委托參數 Console.ReadKey(); } static void Test<T>(Action<T> ac, T inputParam) { ac(inputParam); }
Func,可以傳入參數,必須有返回值的委托
方法1,調用方法
static void Main(string[] args) { Func<string> fc1 = new Func<string>(ShowAddResult);//實例化一個委托 string result = fc1();//調用委托 Console.WriteLine(result); Console.ReadKey(); } static string ShowAddResult() { return "地球是圓的"; }
方法2,使用lambda表達式
static void Main(string[] args) { //實例化一個委托,注意不加大括號,寫的值就是返回值,不能帶return Func<string> fc1 = () => "地球是圓的"; //實例化另一個委托,注意加大括號后可以寫多行代碼,但是必須帶return Func<string> fc2 = () => { return "地球是圓的"; }; string result = fc1();//調用委托 string result2 = fc2();//調用委托 Console.WriteLine(result); Console.WriteLine(result2); Console.ReadKey(); }
方法3,作為參數傳
static void Main(string[] args) { //實例化一個委托,注意不加大括號,寫的值就是返回值,不能帶return Func<int, string> fc1 = (p) => "傳入參數" + p + ",地球是圓的"; //實例化另一個委托,注意加大括號后可以寫多行代碼,但是必須帶return Func<string, string> fc2 = (p) => { return "傳入參數" + p + ",地球是圓的"; }; string result = Test<int>(fc1, 1);//調用委托 string result2 = Test<string>(fc2, "1");//調用委托 Console.WriteLine(result); Console.WriteLine(result2); Console.ReadKey(); } static string Test<T>(Func<T, string> fc, T inputParam) { return fc(inputParam); }
總結:
Delegate至少0個參數,至多32個參數,可以無返回值,也可以指定返回值類型
Func可以接受0個至16個傳入參數,必須具有返回值
Action可以接受0個至16個傳入參數,無返回值