顾名思义 匿名类型就是没有名字的类型。当一个新的匿名对象定义与前面已经存在的类型定义的内部变量类型同样时,编译器就会仅仅生成一个类定义,而不是各一个。

匿名类型对象中仍然能够再包括匿名对象。

在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#超级有用的一种类型—匿名类型的更多相关文章

  1. C#超级实用的一种类型—匿名类型

    顾名思义 匿名类型就是没有名字的类型.当一个新的匿名对象定义与前面已经存在的类型定义的内部变量类型相同时,编译器就会只生成一个类定义,而不是各一个.匿名类型对象中仍然可以再包含匿名对象. 在C#3.0 ...

  2. C#:匿名类型

    匿名类型和var关键字是Visual C# 3.0提供的一个新特性,var是隐式类型而并不是类型javascript中的var. var user = new { Id = 1, Name = &qu ...

  3. C#编程(十六)----------匿名类型

    匿名类型 var和new关键字一起使用,可以创建匿名类型. 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型. 类型名由编译器生成,并且不能在源代码级使用 ...

  4. C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数

    一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...

  5. 33个超级有用必须要收藏的PHP代码样例

    作为一个正常的程序员,会好几种语言是十分正常的,相信大部分程序员也都会编写几句PHP程序,如果是WEB程序员,PHP一定是必备的,即使你没用开发过大型软件项目,也一定多少了解它的语法. 在PHP的流行 ...

  6. Linq专题之提高编码效率—— 第二篇 神一样的匿名类型

    说起匿名类型,我们都知道这玩意都是为linq而生,而且匿名类型给我们带来的便利性大家在实战中应该都体会到了,特别适合于一次性使用,临时 使用这些场景,虽然说是匿名类型,也就是说是有类型的,只是匿名了而 ...

  7. 《精通C#》自定义类型转化-扩展方法-匿名类型-指针类型(11.3-11.6)

    1.类型转化在C#中有很多,常用的是int类型转string等,这些都有微软给我们定义好的,我们需要的时候直接调用就是了,这是值类型中的转化,有时候我们还会需要类类型(包括结构struct)的转化,还 ...

  8. 当匿名类型遇上Distinct

    首先定义一个简单类,并重写ToString方法. public class CommidityFilter { public string Property { get; set; } public ...

  9. C#简单问题,不简单的原理:不能局部定义自定义类型(不含匿名类型)

    今天在进行代码测试时发现,尝试在一个方法中定义一个委托,注意是定义一个委托,而不是声明一个委托变量,在编写的时候没有报错,VS也能智能提示,但在编译时却报语法不完整,缺少方括号,但实际查询并没有缺少, ...

随机推荐

  1. Python: 在Unicode和普通字符串之间转换

    Unicode字符串可以用多种方式编码为普通字符串, 依照你所选择的编码(encoding): <!-- Inject Script Filtered --> Toggle line nu ...

  2. android linearlayout imageview置顶摆放

    在练习android时,想在Linearlayout内放一图片,使其图片置顶,预期效果是这样的: 但xml代码imageview写成这样后, <ImageView android:layout_ ...

  3. How many integers can you find(容斥+dfs容斥)

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  4. MD5加密解密

    方法一 首先,先简单介绍一下MD5 MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer scien ...

  5. ThinkPHP - URL生成(U函数)

    效果: 代码: //U('[分组/模块/操作]?参数' [,'参数','伪静态后缀','是否跳转','显示域名']) echo U('Index/index', array(), '.html', 0 ...

  6. linux修改shell为zsh

    以前使用的bash,如果目录很长,那么整个路径都被占满了. 询问一下一位大牛,答曰:zsh. 安装:ubuntu下sudo apt-get install zsh 修改默认登录shell: $chsh ...

  7. 机器学习笔记(二)- from Andrew Ng的教学视频

    省略了Octave的使用方法结束,以后用得上再看吧 week three: Logistic Regression: 用于0-1分类 Hypothesis Representation: :Sigmo ...

  8. C++拾遗

    1三个概念 字符串字面值是一串常量字符(是一个常量),字符串字面值常量用双引号括起来的零个或多个字符表示,为兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符.字符串字面值的类型 ...

  9. javascript 数组部分

    <html> <body> <script type="text/javascript"> var arr = new Array(6) arr ...

  10. centos 安装lua

    yum install readline-develwget http://www.lua.org/ftp/lua-5.1.4.tar.gztar -xzvf lua-5.1.4.tar.gz3.编译 ...