zoukankan      html  css  js  c++  java
  • C#编程(小结)---------- 小总结

    总结

    概括

    委托是寻址方法的.NET版本,类似于C++中的指针.委托可以理解为指向函数的指针,它是类型安全的,定义了具体的参数和返回值.

    定义一个委托,实际上是定义一个类,委托是对方法的引用,如方法Func,把功能交给委托的类来实现.

    委托的作用:结合泛型,可以实现功能上的扩展(如针对整型的函数,可以通过委托指向多种函数,实现类中某个属性的比较).Lambda表达式需要使用委托定义.事件需要使用到委托.

    Lambda表达式与委托直接相关.Lambda表达式可以理解成一个简单的方法定义(包括参数,返回值),表达式由委托来指向.

    Lambda表达式的作用,减少代码量

    事件,基于委托,为委托提供了一种发布/订阅机制.最直接的就是ButtonClick事件.

    委托案例:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    namespace ConsoleApplication2

    {

        class Program

        {

            //定义一个委托

            public delegate double DoubleOp(double x);

            //定义委托的函数

            public static double MultiplyByTwo(double value)

            {

                return value * 2;

            }

            public static double Square(double value)

            {

                return value * value;

            }

            static void Main(string[] args)

            {

                DoubleOp[] operations = { MultiplyByTwo, Square };

                Console.WriteLine(operations[0](2));

                Console.WriteLine(operations[1](2));

                Console.ReadKey();

            }

        }

    }

    Action<T>委托和Func<T>委托

    Action为返回值void的委托,Func为带返回类(最后一个参数为返回类型).

                //DoubleOp[] operations = { MultiplyByTwo, Square };

                Func<double, double>[] operations = { MultiplyByTwo,Square};

    //上例中的这两句话可以互换

    委托更多的拥簇是作为寒素的参数,可以把符合一定要求(参数,返回值一致)的函数作为参数传入其他函数(是不是和类似指针)

    Lambda表达式

    案例:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    namespace zongjie

    {

        class Program

        {

            static void Main(string[] args)

            {

                string mid = ",2,";

                //有花括号(多条语句的情况)的需要return语句

                Func<string, string> lambdaTest = param =>

                    {

                        param += mid;

                        param += "3";

                        return param;

                    };

                Console.WriteLine(lambdaTest("1"));

                //没有花括号的会隐式添加一条return语句

                Func<string, string> oneParam = s => string.Format("change up{0}",s.ToUpper());

                Console.WriteLine(oneParam("test")); ;

                Func<double, double, double> twoParams = (x, y) => x * y;

                Console.WriteLine(twoParams(3,2));

    Func<double, double, double> twoParamsWithTypes = (double x, double y) => x * y;

                Console.WriteLine(twoParamsWithTypes(4, 2)); ;

                Console.ReadKey();

            }

        }

    }

  • 相关阅读:
    [开源项目]蓝点无限TWR算法-多基站多标签固件
    [开源项目] 蓝点无限 UWB Python版本上位机
    记一次RabbitMQ的脑裂(网络分区)问题
    使用Docker持久化部署SQL Server
    .NET---Exceptionless 轻量级的分布式日志管理平台
    python性能测试工具locust
    Javascript —— 线转树 or 树转线
    记录一个生僻知识点 —— JS字符模板替换
    车证识别工具|行驶证识别工具|行驶证识别OCR工具免费版V3.0.0.0
    C# CAD 凹凸点识别最大轮廓
  • 原文地址:https://www.cnblogs.com/FinleyJiang/p/7602627.html
Copyright © 2011-2022 走看看