C#超级有用的一种类型—匿名类型

时间:2023-03-09 08:40:44
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#超级有用的一种类型—匿名类型