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

在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 ...

  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. C# 匿名对象(匿名类型)、var、动态类型 dynamic——实用之:过滤类属性、字段实用dynamic

    例子 返回一个LIst<oject>类型 而oject含有 30个字段 而我只需要两个字段.这里实用dynamic 和 linq. 上代码: 注意select new {} 为匿名类型,这 ...

  6. 超级实用的 Java 工具类

    超级实用的 Java 工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取 ...

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

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

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

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

  9. 当匿名类型遇上Distinct

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

随机推荐

  1. github上最好的开源MMORPG - stendhal

    Stendhal is a fully fledged multiplayer online adventures game (MORPG). It is completely open source ...

  2. 以Apache模块的方式编译安装php-5.5.4

    新建用户及用户组 groupadd webuser useradd -g webuser webuser 下载php-5.5 下载地址:http://pan.baidu.com/s/1o6I6Lnk ...

  3. verilog实验1:基于FPGA蜂鸣器演奏乐曲并数码管显示

    一.实验任务 利用FPGA进行代码开发,使蜂鸣器演奏出乐曲<生日快乐>,将音调显示在数码管.原理为蜂鸣器为交流源蜂鸣器,在引脚上加一定频率的方波就可以发声,而且发声的频率由所加方波决定.这 ...

  4. (转)Unity控制反转和依赖注入

    昨天,面试官说他们的项目使用的是Unity,我们的项目中使用的是autofac,看了一下,用法都差不多,就连方法的名字都是一样的哈,想了解的朋友可以看看这篇文章,作者讲解的挺详细的,关于autofac ...

  5. Typora最常用快捷键

    插入图片:直接拖动到指定位置即可或者ctrl+shift+i 插入链接:ctrl+k 对于本地图片,我们可以直接拖进来 双回车可以回到行首

  6. Google chrome浏览器中通过扩展调用本地应用程序以及和程序相互通讯(C++)

    最近项目用到浏览插件的开发,IE用到的是BHO,chrome打算做成扩展. 但是和ie有一点不同,chrome扩展是基于html+js+css开发的,那么就会有二个问题 1. 代码和算法等容易被别人复 ...

  7. Nginx与Tomcat/PHP架构优化的技术分享

    PHP性能优化 一般我们是在/usr/local/php5/etc/php-fpm.conf这个文件里面进行相应的配置. 1)       如果设置成static,php-fpm进程数自始至终都是pm ...

  8. 【实用】需要收藏备用的JQuery代码片段

    1 元素屏幕居中 jQuery.fn.center = function () { this.css("position","absolute"); this. ...

  9. go 开发环境安装教程 windows

         首先进入go 语言官网下载最新安装包,我目前安装的版本是 1.8.3版本:go1.8.3.windows-amd64.msi 如果下载慢,这个是百度云地址:https://pan.baidu ...

  10. 机器学习03:K近邻算法

    本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...