- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- namespace _02匿名方法
- {
- class Program
- {
- static void Main(string[] args)
- {
- //string s = new string('*', 100);
- //Console.WriteLine(s);
- //Console.ReadKey();
- #region 匿名方法 + lambda表达式
- ////匿名方法
- ////匿名方法不能直接在类中定义,而是在给委托变量赋值的时候,需要赋值一个方法,此时可以“现做现卖”,定义一个匿名方法传递给该委托。
- ////MyDelegate md = M1;
- ////无参数,无返回值的一个匿名方法。
- //MyDelegate md = delegate()
- //{
- // Console.WriteLine("小鸟说早早。");
- //};
- //md();
- //Console.ReadKey();
- ////没有参数没有返回值的方法使用(lambda)λ表达式
- //MyDelegate md = () => { Console.WriteLine("lambda表达式!!"); };
- //md();
- //Console.ReadKey();
- //////有参数无返回值的匿名方法
- ////MyDelegate1 md = delegate(string msg)
- ////{
- //// Console.WriteLine("早上好!" + msg);
- ////};
- ////md("大家好");
- ////Console.ReadKey();
- ////lambda表达式不需要传递数据类型,因为委托一经限定了数据类型。
- //MyDelegate1 md = m => { Console.WriteLine(m); };
- //md("哈喽,翻译欧克。");
- //Console.ReadKey();
- ////有参数,有返回值的的匿名方法
- //AddDelegate ad = delegate(int n1, int n2, int n3)
- //{
- // return n1 + n2 + n3;
- //};
- //int result = ad(10, 120, 15);
- //Console.WriteLine(result);
- //Console.ReadKey();
- //AddDelegate ad = (x, y, z) => { return x + y + z; };
- //int r = ad(10, 20, 30);
- //Console.WriteLine(r);
- //Console.ReadKey();
- //AddDelegate1 ad1 = (arr) =>
- //{
- // for (int i = 0; i < arr.Length; i++)
- // {
- // Console.WriteLine(arr[i]);
- // }
- // return arr.Sum();
- //};
- //int x = ad1(1, 2, 3, 4, 5);
- //Console.WriteLine(x);
- //Console.ReadKey();
- //List<int> list = new List<int>();
- #endregion
- #region 泛型委托
- //Action
- //Action<T>
- //Func<>
- ////1.需要保存一个无参数,无返回值的一个方法
- //Action action1 = new Action(M1);
- //action1();
- //Console.ReadKey();
- //2.需要保存一个有一个string类型参数,但没有返回值的方法
- //MyDelegate md = M1;
- //md();
- //Console.ReadKey();
- //MyDelegate1 md = M1;
- //md("hello");
- //Console.ReadKey();
- //MyGenericDelegate<string> md = M1;
- //md("aaaa");
- //Console.ReadKey();
- ////Action委托,的非泛型版本,就是一个无参数,无返回值的委托
- ////Action的泛型版本,就是一个无返回值,但是参数可以变化的委托。
- //Action<string> a1 = m => { Console.WriteLine(m); };
- //a1("类好啊");
- //Action<int, int> a2 = (x, y) => { Console.WriteLine(x + y); };
- //a2(100, 100);
- ////Action<string,int,string,int,double>
- //Console.ReadKey();
- //Func委托只有一个泛型版本的,没有非泛型版本的。
- //Func<int, int, int, int> fun = M2;
- // Func<int>
- //AddDelegate fun = M2;
- //int x;
- //int n = fun(1, 2, out x);
- //Console.WriteLine(n);
- //Console.WriteLine(x);
- //Console.ReadKey();
- //Func<int> f = () => { return 100; };
- //int x = f();
- //Console.WriteLine(x);
- //Console.ReadKey();
- #endregion
- #region 使用lambda表达式
- //List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 89, 10, 11, 12, 13, 14, 15 };
- //IEnumerable<int> ie = list.Where(x => { return x > 6; });
- //foreach (var item in ie)
- //{
- // Console.WriteLine(item);
- //}
- ////for (int i = 0; i < list.Count; i++)
- ////{
- //// Console.WriteLine(list[i]);
- ////}
- //Console.ReadKey();
- #endregion
- }
- //static bool Condition(int x)
- //{
- // return x > 6;
- //}
- static void M1(string msg)
- {
- Console.WriteLine(msg);
- }
- static void M1()
- {
- Console.WriteLine("ok111");
- }
- static int M2(int n1, int n2, out int n3)
- {
- n3 = 99;
- return n1 + n2 + n3;
- }
- }
- public delegate int AddDelegate1(params int[] arr);
- public delegate int AddDelegate(int n1, int n2, out int n3);
- public delegate void MyDelegate1(string msg);
- public delegate void MyDelegate();
- public delegate void MyGenericDelegate<T>(T args);
- }