C#学习_委托类型以及Action/Fanc_2018Oct

委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

委托特别用于实现事件和回调方法。所有的委托都派生自 System.Delegate 类。

      (简单说就是委托是一个空壳,调用委托就是对其赋值(值为某一方法)并执行该值;)

      简单实现五步骤:

1.声明委托类;                        -->(如: public delegate void MyDelegate();)

2.定义目标函数  ;                      --> (即写一个或多个需要委托去执行的方法,此方法必须和委托返回值类型参数类型保持一致)

3.声明一个委托变量;                   -->(MyDelegate deleg;)

4.将目标函数赋值给委托类;           -->(一般用+/-=符号进行赋值;如 deleg=method1; deleg+= method2;)

5.调用委托,执行目标方法;                  -->(deleg();    // 执行方法为method1 和 method2)

C#库中有两个做好的委托  ( Action  /  Fanc   )

      Action   

只代表void类型的方法

格式 :

action
               action<参数>

参考代码:

public static void SayHi()
        {
            Console.WriteLine("sayHi");
        }

        public static void SayHiOnePar(int number)
        {
            Console.WriteLine("SayHiOnePar");
        }
        public static void Main(string[] args)
        {
            //委托看的是方法返回值类型和参数类型
            //只要满足该类型的方法都能委托
            Action action = SayHi;
            action();
            Action<int> action01 = SayHiOnePar;
            action01(10);
        }

Fanc

针对有返回值类型的

格式:

Func<参数,参数,参数.....返回值类型>

参考代码:

 public static string TestStr()
        {
            Console.WriteLine("无参数 有返回值");
            return string.Empty;
        }

        public static float TestFloat(int i, double d)
        {
            Console.WriteLine("两个参数 一个返回值");
            return 15.5f;
        }
        public static void Main(string[] args)
        {
            //一个代表返回值类型
            Func<string> func01 = TestStr;
            func01();
            Func<int, double, float> func02 = TestFloat;
            func02(10, 15.5);
        }

原文地址:https://www.cnblogs.com/RainPaint/p/9842758.html

时间: 2024-08-03 03:19:28

C#学习_委托类型以及Action/Fanc_2018Oct的相关文章

Swift编程语言学习1.5——类型别名、布尔值、元组

类型别名 类型别名(type aliases)就是给现有类型定义另一个名字.你可以使用typealias关键字来定义类型别名. 当你想要给现有类型起一个更有意义的名字时,类型别名非常有用.假设你正在处理特定长度的外部资源的数据: typealias AudioSample = UInt16 定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名: var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound 现在是 0 本例中,A

C# in Depth Third Edition 学习笔记-- 值类型和引用

I. C#中值类型和引用类型 1. 类class 引用类型,结构struct值类型 2. 数组是引用类型,即使元素是值类型,int[]是引用类型 3. 枚举是值类型enum 4. 委托类型delegate是引用类型 5. 接口类型interface是引用类型,但可以由值类型实现. II. 值的表达式:表达式“2+3”的值就是5:而对于引用类型的表达式,它的值是一个引用,而不是该引用所指代的对象,如String.Empty的值不是一个空字符串,而是对空字符串的一个引用. III. 变量的值在它声明

【web开发学习笔记】Structs2 Action学习笔记(三)action通配符的使用

action学习笔记3-有关于通配符的讨论 使用通配符,将配置量降到最低,不过,一定要遵守"约定优于配置"的原则. 一:前端htm <前端代码html> </head> <body> <a href="<%=context %>/actions/Studentadd">添加学生</a> <a href="<%=context %>/actions/Studentdel

自定义委托类型 - .Net自带委托类型

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递. 与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用. 一.自定义委托类型 1.语法结构:访问修饰符 delegate 返回类型 委托类型名称(参数列表); 例如: // 声明一个委托类型,两个参数均为int类型,返回值为int类型 public delegate int Calc(int a, int b);自定义的委托可以不带参数,也可以没有返回值. 接下来我们看一个例子怎么使用委托 1.

C#学习:委托、事件、匿名方法

一.委托: 委托给我的感觉就是一个种类型,可以让方法更具面向对象的特性——你看,其实我也没说明白,因为我也不大理解.还是一步步往下学吧. 具体来说,委托就是一个类似下面的这种东西: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace ConsoleTestCsharp { class Program { d

.net学习之委托和事件

1.什么是委托通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器上传图片: 2.委托语法准备一个方法:string Hello(string userName){} string Hello2(string userName){}声明委托类:delegate string DGSayHi(string userName);创建委托对象:DGSayHi dgSay = new DGSayHi(Hello); 或 DGSsyHi dgSay = Hello;追加方法:dgSay

LR基础学习_脚本信息函数

LR基础学习_脚本信息函数 Action() { //脚本信息函数. //lr_whoami:返回Vuser的ID,组名称,场景ID信息. /* int id,scid; char *vuser_group; lr_whoami(&id,&vuser_group,&scid); lr_error_message("Group:%s,vuser id:%d,scenario id %d",vuser_group,id,scid); */ //lr_get_host

类库_委托

一:类库: 说白了,就是让别人调用你写的方法,并且不让别人看到你是怎么实现的. 如果有功能你不会做,需要别人帮忙,那么你的同事可以帮你写好一个类,然后你来调用这个类中的方法,完成你的项目. 两种形式: 1.C#源代码文件,包括在自己的项目中(这种可以查看到具体是怎么实现的,也可以更改) 2.类库,.dll  (虽然无法查看,但是生活中很多都是这样的,毕竟不能让别人看到你的核心代码,为了保密) 优点:你写的方法别人看不到实现过程,保密性强 缺点:如果你写的方法有错误,别人无法更改 --------

(转).net学习之委托和事件

.net学习之委托和事件 1.什么是委托 通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器 上传图片: 2.委托语法 准备一个方法:string Hello(string userName){}        string Hello2(string userName){} 声明委托类:delegate string DGSayHi(string userName); 创建委托对象:DGSayHi dgSay = new DGSayHi(Hello); 或 DGSsyHi