博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
委拖 lambda 匿名方法 匿名类 扩展方法
阅读量:4339 次
发布时间:2019-06-07

本文共 2426 字,大约阅读时间需要 8 分钟。

1. 委托的声明

public delegate void NoReturnNoParam();

public delegate int WithReturnNoParam();
public delegate void NoReturnWithParam(string s, int i);
public delegate int WithReturnWithParam(string s, int i);

委托的声明: delegate [返回类型]  委托类型名 (参数1, 参数2)

委托是一种类型;

2. 委托的实例化

NoReturnNoParam method1 = new NoReturnNoParam(this.DoNothing);

NoReturnNoParam method2 = new NoReturnNoParam(() => { Console.WriteLine("Do nothing"); });
NoReturnNoParam method3 = this.DoNothing;
NoReturnNoParam method4 = () => { Console.WriteLine("Do nothing"); };

委托的实例化:

   1. 通过new 构造一个委托实例,参数是:方法(名)或lambda表达式;

   2. 直接给委托的变量赋值一个方法(名)或lambada表达式;

在给委托实例化的时候,一定要注意:用来实例化委托的方法的签名(返回值类型,参数类型和顺序都必须一致)必须和委托的声明是一致;

3. 委托的调用

method1.Invoke();

method1();

委托的调用:

   1.  通过委托实例的Invoke方法调用;

   2.  将委托当成方法一样,直接在实例名后加上括号和参数直接调用;

4. 匿名方法

WithReturnNoParam method5 = new WithReturnNoParam(delegate ()

{
     return 100;
}
);
WithReturnNoParam method6 = new WithReturnNoParam(delegate ()
{
     return 100;
}
);

5. lambda表达式

将匿名方法的delete去掉,在参数列表后加上”=>”(goes to)

WithReturnNoParam method7 = new WithReturnNoParam(() => { return 100; });

WithReturnNoParam method8 = () => { return 100; };
WithReturnNoParam method9 = () => 100;  //方法体只有一行的时候,可以去掉大括号和分号,如果仅有的一行是return语句,还可以省略return关键字

NoReturnWithParam method10 = (string name, int age) => { Console.WriteLine($"name:{name}, age:{age}"); };

NoReturnWithParam method11 = (name, age) => Console.WriteLine($"name:{name}, age:{age}"); //参数类型可以省略

6. 系统自带的委托

Action :   没有返回值的委托,参数最多16个

Func: 带返回值 的委托,参数最多16个;Func的泛型的最后一个可变类型参数是返回类型

Action act1 = () => Console.WriteLine("Do nothing");

Action<string> act2 = s=>Console.WriteLine(s);  // 当只有一个参数的时候,括号可以省略       

Func<int> func1 = () => 100;

Func<string, int> func2 = (s) => s.Length;  

7. 匿名类 var

object user = new

{
     Name = "Harry",
     Age = 18,
     Height = 176.5,
     Address = "Peking City"
};
//Console.WriteLine(user.Name); // 不可以访问user的属性
var user2 = new
{
     Name = "Harry",
     Age = 18,
     Height = 176.5,
     Address = "Peking City"
};
Console.WriteLine($"Name:{user2.Name}, Age:{user2.Age}, Height:{user2.Height}, Address:{user2.Address}");

var 关键字可以接收返回任意类型的结果或表达式的结果,前提类型可由编译器推导出;

var只能声明局部变量,不能是字段,也不能是静态属性;

var声明的时候必须被初始化;

8. 扩展方法

静态类,静态方法的第一个参数前加上this关键字,这个参数所在的类型将都会扩展此方法,可像成员方法一样去调用,如:

public static class ExtendShow

{
     public static int ToInt(this int? i)
     {
         return i ?? -1;
     }

}

int? i = null;

Console.WriteLine(i.ToInt());

在不修改第三方类库封装的情况下,给类型额外的扩展一个方法;

如果跟实例方法相同,则优先调用实例方法;

转载于:https://www.cnblogs.com/matsn/p/6986760.html

你可能感兴趣的文章
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-07 Eureka服务注册中心配置控制台问题处理...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-01 微服务网关介绍和使用场景
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-05熔断降级服务异常报警通知
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-08 断路器监控仪表参数
查看>>