扩展、委托、Lambda、linq

时间:2021-02-19 19:03:51

1、扩展

扩展是一个很有用的功能。如果你有一个类、不能修改,同时你又想给他加一个方法。这个过程就是扩展。扩展就是扩展方法。

例1:

类People

    public class People
    {
        public string Name { get; set; }
        public int age { get; set; }
    }

 

增加一个扩展:

1、扩展必须是一个静态的类

2、扩展方法必须是一个静态的方法

3、被扩展的对象必须是前面加 this People people

    public static class extend
    {
        public static string  ToJson(this People people)
        {
            return JsonConvert.SerializeObject(people);
        }
    }

使用扩展:

            ///创建对象
            People people = new People() { Name = "Eleven", age = 30 };
            ///使用扩增的 ToJson
            people.ToJson();
            ///使用扩增的 ToJson
            extend.ToJson(people);

2、委托

委托的本质就是一个函数指针。委托是事件的基础

定义一个委托:

1、委托的定义就是、在方法前面加一个 delegate

2、并且这个方法不用且不能去实现

3、并且委托是一个类型

        /// <summary>
        /// 定义了一个委托
        /// </summary>
        /// <param name="a">参数A</param>
        /// <param name="b">参数B</param>
        /// <returns></returns>
        delegate int Plus(int a, int b);

使用:(多次订阅、可以并行执行)

            ///实现委托
            Plus plus = new Plus(PlusMethods);
            ///并行实现
            plus += PlusMethods2;
            ///并行实现
            plus += PlusMethods3;
            ///执行委托,PlusMethods,PlusMethods2,PlusMethods3 并行执行
            plus.Invoke(1, 2);

实际方法:

        static int PlusMethods(int a, int b)
        {
            Console.WriteLine("PlusMethods:{0},{1}", a, b);
            return a + b;
        }
        static int PlusMethods2(int a, int b)
        {
            Console.WriteLine("PlusMethods2:{0},{1}", a, b);
            return a + b;
        }
        static int PlusMethods3(int a, int b)
        {
            Console.WriteLine("PlusMethods3:{0},{1}", a, b);
            return a + b;
        }

3、Lambda

Lambda实际上就是一个匿名方法进化的语法。

例中,我们看一下,一步一步如何进化。

            ///匿名方法
            Plus plus2 = new Plus(delegate (int a, int b)
            {
                Console.WriteLine("匿名方法{0},{1}", a, b);
                return a + b;

            });
            plus2.Invoke(1, 2);
            ///Lambda方法,就是把 delegate 去掉,在中间加了一个 => 符号
            Plus plus3 = new Plus((int a, int b) =>
            {
                Console.WriteLine("匿名方法{0},{1}", a, b);
                return a + b;

            });
            plus3.Invoke(1, 2);
            ///Lambda方法,把 new Plus() 也去掉了
            Plus plus4 = (int a, int b) =>
            {
                Console.WriteLine("匿名方法{0},{1}", a, b);
                return a + b;

            };
            plus4.Invoke(1, 2);

Lambda 3个组成结构,参数:()  中间符=> 实体{} 

4、linq

linq 就是微软把SQL语法搬到了C#代码中

对于集合的查询还是很有帮助的。

            IEnumerable<People> listSearch = from i in peopleList
                                             where i.age > 20
                                             select i;

 

详细LINQ参考:

https://msdn.microsoft.com/zh-cn/library/bb397676.aspx