C#超级有用的一种类型—匿名类型
顾名思义 匿名类型就是没有名字的类型。当一个新的匿名对象定义与前面已经存在的类型定义的内部变量类型同样时,编译器就会仅仅生成一个类定义,而不是各一个。
匿名类型对象中仍然能够再包括匿名对象。
在C#3.0中同意我们在程序中声明一个暂时的类型来存储数据,比如:
class Program
{
static void Main(string[] args)
{
//声明一个匿名对象,拥有 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
或者直接用手机扫描二维码查看很多其它博文:
C#超级有用的一种类型—匿名类型的更多相关文章
- C#超级实用的一种类型—匿名类型
顾名思义 匿名类型就是没有名字的类型.当一个新的匿名对象定义与前面已经存在的类型定义的内部变量类型相同时,编译器就会只生成一个类定义,而不是各一个.匿名类型对象中仍然可以再包含匿名对象. 在C#3.0 ...
- C#:匿名类型
匿名类型和var关键字是Visual C# 3.0提供的一个新特性,var是隐式类型而并不是类型javascript中的var. var user = new { Id = 1, Name = &qu ...
- C#编程(十六)----------匿名类型
匿名类型 var和new关键字一起使用,可以创建匿名类型. 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型. 类型名由编译器生成,并且不能在源代码级使用 ...
- C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数
一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...
- 33个超级有用必须要收藏的PHP代码样例
作为一个正常的程序员,会好几种语言是十分正常的,相信大部分程序员也都会编写几句PHP程序,如果是WEB程序员,PHP一定是必备的,即使你没用开发过大型软件项目,也一定多少了解它的语法. 在PHP的流行 ...
- Linq专题之提高编码效率—— 第二篇 神一样的匿名类型
说起匿名类型,我们都知道这玩意都是为linq而生,而且匿名类型给我们带来的便利性大家在实战中应该都体会到了,特别适合于一次性使用,临时 使用这些场景,虽然说是匿名类型,也就是说是有类型的,只是匿名了而 ...
- 《精通C#》自定义类型转化-扩展方法-匿名类型-指针类型(11.3-11.6)
1.类型转化在C#中有很多,常用的是int类型转string等,这些都有微软给我们定义好的,我们需要的时候直接调用就是了,这是值类型中的转化,有时候我们还会需要类类型(包括结构struct)的转化,还 ...
- 当匿名类型遇上Distinct
首先定义一个简单类,并重写ToString方法. public class CommidityFilter { public string Property { get; set; } public ...
- C#简单问题,不简单的原理:不能局部定义自定义类型(不含匿名类型)
今天在进行代码测试时发现,尝试在一个方法中定义一个委托,注意是定义一个委托,而不是声明一个委托变量,在编写的时候没有报错,VS也能智能提示,但在编译时却报语法不完整,缺少方括号,但实际查询并没有缺少, ...
随机推荐
- Java怎样高速构造JSON字符串
目标:依据key/value高速构造一个JSON字符串作为參数提交到web REST API服务上. 分别測试里阿里巴巴的FastJson和Google Gson,终于我採用了Google Gson来 ...
- Android 自定义view实现水波纹效果
http://blog.csdn.net/tianjian4592/article/details/44222565 在实际的开发中,很多时候还会遇到相对比较复杂的需求,比如产品妹纸或UI妹纸在哪看了 ...
- ThinkPHP - URL - 伪静态 - 路由 - 重写
URL: 一.URL规则 1.默认是区分大小写,可以修改(配置文件)为不区分大小写. 2. //修改URL大小写问题 'URL_CASE_INSENSITIVE' =>true, 如果模块名为 ...
- uboot编译: uboot编译配置和编译过程
jz2440: 韦东山Linux视频第1期_裸板_UBoot_文件系统_驱动初步\第09课第2节 u-boot分析之Makefile结构分析.WMV <嵌入式linux完全开发手册> 15 ...
- linux中/etc与/var目录,各是什么意思?这两个目录下的文件有什么特点?
http://zhidao.baidu.com/link?url=DkxU9CyhJb_dIUAPCmPmxRtQsENgCzqy5qnLPEj_V9DqNzdt6Qya0U5iCVRCYFkgoRo ...
- Identifiers
Identifier An identifier is an arbitrarily long sequence of digits, underscores, lowercase and upper ...
- 【QT相关】类头文件解读、QT编辑模式、读取text文本
Wizard产生的头文件类包含了必须的#include文件.构造函数.析构函数和UI对象: #include <QMainWindow> namespace Ui {class Notep ...
- 从零搭建LNMP环境
Linux就是环境所在的操作系统: Nginx则是一个「高性能的HTTP和反向代理服务器」,官网地址:http://nginx.org/: MySQL则是一个方便地对数据进行增删改查的数据库管理系统, ...
- KVO(键-值观察)
// 1.键-值观察 // 2.它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知. // 3.符合KVC(Key-ValuedCoding)机制的对象才可以使用KVO // 4.实现过 ...
- nodejs--express开发个人博客(-)
写完了入门笔记,开始进入开发阶段吧.基于上一节的内容,现在着手开发个人博客系统.先划分一下功能吧 /:首页 /login:登陆 /reg:注册 /post:发表文章 /logout:退出 首先规划一下 ...