深入了解c# 匿名类型
作者:a 发布时间:2022-04-08 22:38:21
一、什么叫做匿名类?
匿名类就是没有名字的类。匿名类不能被引用,只能再创建的时候用new语句来声明。
二、匿名类的优势以及应用场景;
1、匿名类型提供了一种方便的方法,可以用来将一组只读属性封装到单个的对象中,而且并不需要首先显示定义一个类型。
2、类型名由编译器生成,并且不能在源代码级使用。每个属性的类型由编译器推断。
3、可通过是用new运算符和对象初始值创建匿名类型。
4、匿名类型通常用在查询表达式的 Select 子句中,以便返回原序列中每个对象的属性子集(Linq 中使用的比较多)。
三、匿名类的应用;
//匿名类型
var news = new {title="冰红茶",day="2019-4-10",author="康师傅"};
showInfo(news);
//
static void ShowInfo<T>(T news)
{
dynamic d = news;
Console.WriteLine(d.title);
Console.WriteLine(d.day);
Console.WriteLine(d.author);
}
四、var隐式类型;
隐式类型var,声明变量是无需指定数据类型的,编译器会根据赋值判断其类型的一种机制,它的优势就在于,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型。
五、var 的使用规则;
1、var 类型会被编译器根据初始值的类型推断出具体的类型;
2、var 类型的局部变量必须赋予初始值;
3、无法将null赋值给隐式类型的局部变量;
4、var 类型变量的定义必须是在方法中或者在属性get、set 访问器中;
5、var 不能做方法的参数;
6、不能当作返回值类型;
7、语句中只能声明一次变量,声明后不能更改类型;
六、匿名方法;
匿名方法是C#2.0引入的一个新的特性,它允许开发者内联(inline)声明自己的函数代码而无须使用委托函数(delegate function)。
匿名方法的应用场景:
1、需要一个临时方法,这个方法使用次数极少;
2、这个方法的代码很短,甚至可能比方法声明都短的情况下使用;
七、匿名方法的实例:
/*匿名方法的演化过程*/MySumHandler m1 = new MySumHandler(Sum);
m1(2,3);
MySumHandler m2 = Sum;
m2(3,4);
//匿名方法,C#2.0
MySumHandler m3 = delegate(int i, int j){Console.WriteLine("{0}+{1}={2}",i,j,(i+j));};
m3(5,6);
//lambda,表达式C#3.0
MySumHandler m4 = (i,j)=>{Console.WriteLine("{0}+{1}={2}",i,j,(i+j));};
八、Func和Action的使用:
Func<TResult>和Action<T>是.NET的内置委托。Func<TResult>要求由返回值。Action<T>要求无返回值。
在使用时,Func<T1,T2,……,T16,TResult>中尖括号中的最后一个类型就是返回值。
Action<T1,T2,……,T16>,T1 至 T16 是参数。
来源:https://www.cnblogs.com/chenyao-1424433719/p/11210197.html


猜你喜欢
- 使用 AppbarLayout 和 MotionLayout 实现常用的布局效果前文我们讲了协调滚动的一些定义方式,我们在开发中常用的几种效
- 本文记录了笔者的第一个Java程序,基于Java抽象窗口工具(abstract window toolkit , AWT)和Swing(Sw
- 一、File --> new -->project二、构建maven项目。三、创建项目名,报名,项目路径。四、选择好maven仓
- 在C程序代码中我们可以利用操作系统提供的互斥锁来实现同步块的互斥访问及线程的阻塞及唤醒等工作。然而在Java中除了提供LockAPI外还在语
- 文章描述弱水三千,我只取一瓢饮。一张动图,我只想要其中一帧。如何将一个GIF动态图分割成一帧一帧的图片?其实现在这样的工具随处可见,无论是在
- 🍅1.注解JUnit提供了非常强大的注解功能,通过@Test注解修饰到方法上,该方法就变为了一个测试方法,执行当前类时,会自动的执行该类下所
- 前言在公司的图书馆项目中曾经用过截取字符串的方法,项目是java语言的;最近在公司的另一个项目中又需要截取字符串,一种环境是C#语言,一种环
- 谜题在C#中,用virtual关键字修饰的方法(属性、事件)称为虚方法(属性、事件),表示该方法可以由派生类重写(override)。虚方法
- 下载动画经常出现在下载需求多的app中,比如游戏下载平台,应用市场……先看看效果图:实现private void startAnim() {
- 本文实例讲述了C#发送内置图片html格式邮件的方法。分享给大家供大家参考。具体如下:下面的代码用于发送html格式的邮件,并且可以将图片附
- 必须明确告诉DispatcherServlet如何处理MultipartRequest。SpringMVC中提供了文件上传使用方式如下配置x
- 本文实例讲述了C#编程获取客户端计算机硬件及系统信息功能。分享给大家供大家参考,具体如下:这里使用C#获取客户端计算机硬件及系统信息 ,包括
- 看到某些App里面有读取联系人的功能,然后自己尝试了一下。发现这个挺简单的。然后自己就做了一个demo给大家,希望借这个demo可以让大家学
- Room在SQLite基础上做了ORM封装,使用起来类似JPA,不需要写太多的sql。导入依赖//roomdef room_version=
- 本文实例为大家分享了Java使用poi操作excel的具体代码,供大家参考,具体内容如下依赖poi的jar包,pom.xml配置如下:<
- 目录单一职责原则接口隔离原则开闭原则里氏替换原则依赖倒置原则迪米特法则笔者作为一个菜鸟,会尝试以简单的代码和容易理解的语句去解释这几种原则的
- 为什么要重复造轮子你可能会问,Spring已经自带了全局异常拦截,为什么还要重复造轮子呢?这是个好问题,我觉得有以下几个原因装逼Spring
- stack介绍和使用stack文档介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插
- 本文讲述了Android应用程序模型之应用程序,任务,进程,线程。分享给大家供大家参考,具体如下:大多数操作系统,在应用程序所寄存的可执行程
- Spring中Profile对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。文件名格式:application-