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
或者直接用手机扫描二维码查看更多博文:

时间: 2024-09-10 14:56:05

C#超级实用的一种类型—匿名类型的相关文章

看看这个超级实用的一种类型——匿名类型

既然说到匿名类型超级实用,得要找到场景来说服一下,如果大家玩过php,里面有一个万能的关联数组array,任你在关联数组array里面怎么写,都 可以用json_encode来生成json,非常非常的方便. <?php //可以这么写 $arr= array("name"=>"hxc","age"=20,"isMale"=>true); //也可以这么写 $arrayName = array("li

超级实用的几种表单校验效果收集

************************************************************* 只能是写限定的东西 程序代码: ENTER键可以让光标移到下一个输入框 <input > 只能是中文<input onkeyup='value=value.replace(/[ -~]/g,'')' > 只能是英文和数字.屏蔽了输入法<input style='ime-mode:disabled' > 只能输入英文和数字<input onke

网页:超级实用的几种表单校验效果收集

网页 只能是写限定的东西 程序代码: ENTER键可以让光标移到下一个输入框 <input >// Coded by windy_sk <windy_sk@126.com> 20040205 function reportError(msg,url,line) {var str = 'You have found an error as below: \n\n';str += 'Err: ' + msg + ' on line: ' + line;alert(str);return

C#3.0新特性――隐含类型局部变量和匿名类型

C#3.0引进新关键字var,它是一个类型,可以用来声明局部变量. Code var I = 1; //int类型 var j = "reallypride"; //string类型 var k = new[] { 1, 2, 3, 4 }; //int[]类型 var x; //错误,必须初始化 var y = null; //错误,不可以为空 使用var变量要点: 1.使用var声明局部变量,编译器会根据后面的初始化表达式自动推断变量的类型,这个类型是强类型. 2.var变量在声明

C#教程:匿名类型和隐式类型变量的区别

隐式类型变量 (Implicitly typed local variables) 象下面的代码书写就是隐式类型变量 var i = 5; var str = "Csharp" var numbers = new int[]{1,2,3}; var orders = new System.Collections.Hashtable(); var orders1 = new Dictionary(); var i = xxx ; 的作用就是用 xxx 的类型声明为i的类型.并给i 赋值.

C# 3.0中新匿名类型特性初体验

在去年PDC2005上,在发布C#2.0 (C# Whidbey)的同时,微软也同时展示了它们在C# 3.0上的一些计划.在提到一系列新的语言特性如语言集成查询(LINQ)等,Redmond同时也介绍了一个新的特性--匿名类型.本文详细介绍了匿名类型. 匿名类型定义 C#3.0规范将匿名类型描述为从对象初始化器(object initializer)自动推断和生成的元组类型.在你能够充分领会这一定义之前,你需要了解"对象初始化器"的概念,它是匿名类型特性的基础. 对象初始化器给一个对象

C# 3.0新特性初步研究 Part5:匿名类型

匿名类型(Anonymouse Type)--这年头什么多系都匿名了 : )在初始化的时候根据初始化列表自动产生类型的一种机制. 典型的代码:1class Program2    {3        static void Main(string[] args)4        {5            var x = new { a = 3, b = 5, c = "some text" };6            Console.WriteLine(x.a.ToString()

超级实用的Excel图表技巧解析

  超级实用的Excel图表技巧解析          [例]如下图所示的excel图表中,从下至上分三种蓝色作为背景,分别显示差(<50).中(<100).优(<150)3个档次. 制作方法: 1.设计源数据表,把50.100和150输入到CDE列中. 2.选取A列和E列,插入图表 - 柱状图. 3.在柱子上右键单击 - 设置数据系列格式,把系列重叠调整最大,分类间距调整为0%. 4.依次复制D.C.B列数据,粘到图表上,结果如下图所示. 5.选取利润系列并单击右键 - 设置数据系列格

编写高质量代码改善C#程序的157个建议[匿名类型、Lambda、延迟求值和主动求值]

原文:编写高质量代码改善C#程序的157个建议[匿名类型.Lambda.延迟求值和主动求值] 前言 从.NET3.0开始,C#开始一直支持一个新特性:匿名类型.匿名类型由var.赋值运算符和一个非空初始值(或以new开头的初始化项)组成.匿名类型有如下基本特性: 1.既支持简单类型也支持复杂类型.简单类型必须是一个非空初始值,复杂类型则是一个以new开头的初始化项. 2.匿名类型的属性是只读的,没有属性设置器,它一旦倍初始化就不可更改. 3.如果两个匿名类型的属性值相同,那么就任务这两个匿名类型