C#超级实用的一种类型—匿名类型
顾名思义 匿名类型就是没有名字的类型。当一个新的匿名对象定义与前面已经存在的类型定义的内部变量类型相同时,编译器就会只生成一个类定义,而不是各一个。匿名类型对象中仍然可以再包含匿名对象。
在C#3.0中允许我们在程序中声明一个临时的类型来存储数据,例如:
//声明一个匿名对象,拥有 Name和Age 属性 var obj = new { Name = "Joey", Age = 25 };//这里的new { Name = "Joey", Age = 25 } 就是一个匿名类型 ,obj则是这个类型的一个对象,称为匿名对象 Console.WriteLine("匿名对象obj : Name=" + obj.Name + " , Age=" + obj.Age); }
上述代码中,我们声明了一匿名对象obj ,然后输出对象的属性值。
如果在VS 你将鼠标移到 obj前面的var 上面,vs 会提示:obj 是一个匿名类型 ‘a 。这个‘a 是编译器自动作为标识的一个类型,匿名对象在编译时,编译器还是得给它一个类型。其实上面的匿名类型 new { Name = “Joey”, Age = 25 } 是直接从Object继承过来的, 相当于
public class ‘a{
public string Name{get;private set;}
public int Age{get;private set;}
}
这样的一个拥有只读属性的自定义类型。
在MSDN 中匿名类型的定义是这样的:
1.匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。
2.类型名由编译器生成,并且不能在源代码级使用。每个属性的类型由编译器推断。
3.可通过使用 new 运算符和对象初始值创建匿名类型。
上面三句话是所谓的”说到点子上了”.让人一看就明白匿名类型。但是在这里,我还得提一提,匿名类型和var 隐式类型化的声明关键字的关系;
很多新手在看到var 声明时,就觉得这是一个匿名对象,匿名类型的对象是必须用var 来声明,但是用var 声明的对象不一定都是匿名对象,例如 var n=5; 你就不能说n 是一个匿名对象,n只是一个隐式类型化的局部变量;而 var s=new{ S1=”abc”,S2=”def”}; s 则是一个 类型为匿名类型的对象。也就是说 匿名对象是 用var 声明的一个 在内存中临时的类型的对象。它的类型不能像隐式类型那样根据右边的实例画表达式来推断类型,它是一个实实在在的匿名类型,而var i=5; 这种隐式类型的声明,编译时,i其实还是 int32 类型,隐式类型只是一种语法。
希望以上分享对初学朋友有些帮助,谢谢!
更多关注付义方技术博客:http://blog.csdn.net/fuyifang
或者直接用手机扫描二维码查看更多博文:
方法的返回值类型为引用数据类型时 方法的返回值类型为引用数据类型: 基本数据类型:(基本类型太简单,我不准备讲解) 引用数据类型: 1.方法的返回值类型为类名时:返回的是该类的对象。 2.方法的返回值类型为抽象类名时:返回的是该类的子类对象。
相关文章
- c# https请求
- C#_根据银行卡卡号判断银行名称
- C#_Winfrom将浏览器生成Image
- C#使用ComboBox控件
- C#实现图的广度优先搜索BFS算法--完整代码
- C#和倍福PLC之间的通信
- C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解 转载 https://www.cnblogs.com/landeanfen/p/5501487.html
- 【C# OpenCV】EmguCV4.5.4同步更新,新增功能早知道
- C#之转换两个不同类型但是成员相同的对象
- C# 反射 操作列表类型属性
- C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
- C#中通过Selenium IWebDriver实现人人网相册备份工具
- .NET Core(C#)通过SharpCifs访问操作Windows(smb)共享目录方法代码
- C#操作Office- Cannot find the interop type that matches the embedded interop type 'Microsoft.Office.Interop.Excel.Application'
- C#中类型Type的GetMethod方法
- C#制表符过滤处理方法
- C# 类型 对应 SQLserver类型
- dotnet C# 反射扫描程序集所有类型会不会触发类型静态构造函数
- 2019-11-29-C#-在-8.0-对比-string-和-string_-的类型
- 2019-4-16-C#-在-8.0-对比-string-和-string_-的类型
- C# 转换类型和字符串
- C# 在 8.0 对比 string 和 string? 的类型
- C# DataGrid 控件在winform里显示行号