• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#编程(小结)----------小总结

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

总结

概括 

委托是寻址方法的.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();

 

        }

    }

}


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#Unicode编码与解码方法发布时间:2022-07-14
下一篇:
C#根据webservice地址动态加载webservice发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap