首先让我们看一个例子, 假设我们并没有Person类, 并且我们关心的属性只有Name和Age. 下面的代码演示了我们如何在没有声明类型的情况下来构建一个对象的:
1: var tom = new { Name = Tom, Age = 4 };
2: var holly = new { Name = Holly, Age = 31 };
3: var jon = new { Name = Jon, Age = 31 };
4: Console.WriteLine({0} is {1} years old, jon.Name, jon.Age);
匿名类型是由编译器创建并其包含在编译后的Assembly当中, 其方式与匿名方法和iterator block的创建方式是一致的. CRL把它们都当成普通的类型, 实际上他们就是普通的类型——如果你将其从匿名类型更改成为一个普通类型, 并且手工编写所有行为的代码, 我们不会看到有任何的改变. 匿名类型包含以下的成员:
一个负责所有初始化值的构造器, 其参数将会是与匿名对象初始化器当中出现的顺序和类型一致, 同样名称也是一样的.
公共只读的属性
私有的只读字段, 用于支持属性
重载了Equals, GetHashCode和ToString
这就是全部了, 没有实现任何借口, 没有克隆和序列化能力——仅仅是一个构造器, 一些属性和几个来自于object的平常的方法.
网友评论