扩展委托Lambdalinq

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展委托Lambdalinq相关的知识,希望对你有一定的参考价值。

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#代码中

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

 

 

详细LINQ参考:

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

 

以上是关于扩展委托Lambdalinq的主要内容,如果未能解决你的问题,请参考以下文章

集合扩展方法委托的运算事件

未调用 UserNotifications 扩展服务 UNNotificationAction didReceive 操作委托。

如何使用扩展设置 viewController 搜索栏的委托?

在值类型上定义的扩展方法不能用于创建委托 - 为啥不呢?

扩展现有协议以修改 Objective C 中的委托参数

WatchKit Complication:从扩展委托获取复杂数据