描述C# Anonymous Type

开发 后端
这里介绍C# Anonymous Type Overview在传统的编程模式中,对象依赖于一个既定的Type,我们只能在Type的基础上创建相应的Instance。

在C#2.0中,引入了一个新的Feature:Anonymous Method,允许我们已Inline的方式来定义Delegate,为Developer在Coding的时候带来了很大的便利。在C#3.0中,我们又有了另一个相似的Feature:Anonymous Type。Anonymous Type允许我们已Inline的方式的创建一个基于未知类型、具有所需数据结构的对象。

C# Anonymous Type Overview在传统的编程模式中,对象依赖于一个既定的Type,我们只能在Type的基础上创建相应的Instance。比如如果我们需要创建一个Employee Instance,前提是我们已经有了一个相应的Emplyee Type的定义。比如:

  1. publicclassEmployee  
  2. {  
  3. privateGuid_id;  
  4. privatestring_name;  
  5.  
  6. publicGuidID  
  7. {  
  8. get{return_id;}  
  9. set{_id=value;}  
  10. }  
  11.  
  12. publicstringName  
  13. {  
  14. get{return_name;}  
  15. set{_name=value;}  
  16. }  

有了这样一个Employee Type,我们才可以创建相应的Employee Instance。

var v = new Employee{ ID = Guid.NewGuid(), Name = "Zhang San" };
注:在上面的Code中,实际上使用到了另外两个C# 3.0的new feature: Implicitly typed local variable & Object Initializer.

这样基于一个预先定义的Type的对象创建方式的一个最大的限制就是:对于我们需要创建的每一个对象,我们必先定于该对象对应的Type。Anonymous Type有效地解决了这个问题。我认为Anonymous Type主要是基于下面的目的而设计:

一个Type是对一个现实中实体的State(Data)和Behavior(Method)的抽象。对于一些仅仅只包含State(Data)的 Type(这样对象通常作为Data Package在Application各个Layer之间、以及一个分布式环境中各个Application之间进行数据的传递),我们关心的仅仅是这个由这些数据成员组成结构:Type由哪些数据成员构成,它们的名称是什么,具有怎样的数据类型。换句话说,这样的Data-based Type定义了一个Data Structure,相应地,我们可以说一个固定的Data Structure对应着一个特定的Type。而C# Anonymous Type就提供了这样的实现:Compiler通过我们在Source Code定义的数据成员的具体结构为我们创建相应的Type。

比如我们现在需要一个在上面定义的Employee对象,实际上我们不是需要的一个Type Name叫做Employee的对象,而是需要一个具有如下特征的对象:该对象具有两个数据成员: ID & Name,他们的数据类型分别为GUID和string。在Source Code中,我们通过以下各结构指定这种特征:var v = new{ID = Guid.NewGuid(), Name= "Zhang San" };
我们仔细分析上面这段代码,实际上它包含两部分的信息的:

为 Compiler Type的创建定义一个数据结构。{}中的内容指明了:包含两个数据成员,第一个是名称为ID,第二个为Name(成员的顺序也是一个决定因素,也就是说 {ID = Name= "Zhang San" ,Guid.NewGuid()}和{ID = Guid.NewGuid(), Name= "Zhang San" }对于的Anonymous Type将是不同的。我不太清楚这样的设计到底处于一个什么样的目的);和Implicitly typed local variable一样,成员的类型由指定的数据或者表达式计算结果的数据类型决定。

为在运行时对象的创建提供数据,就像Constructor的参数一样。以上介绍C# Anonymous Type。

【编辑推荐】

  1. 浅析C# ArrayList
  2. C#对象初始化学习总结
  3. 使用C#正则表达式匹配相关字符串
  4. C#改写方法学习笔记
  5. 概述C#加框和消框
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-17 16:47:51

C# Anonymou

2009-08-18 09:24:52

C# Anonymou

2009-08-13 17:04:09

C#语言C#程序

2009-08-20 09:30:03

C#开发WinForm

2009-08-03 16:45:02

C#异步Socket

2009-08-31 13:18:09

C# IWebMess

2009-08-03 18:08:39

C# ICloneab

2009-08-26 17:49:36

C# readonly

2009-08-18 17:41:22

C# ListView

2009-08-31 18:32:01

C# ListBoxE

2009-08-19 10:09:21

C#和C++

2009-09-07 15:31:49

C#支持事件

2009-09-07 13:02:52

Java和C#线程

2009-08-27 10:01:52

C#自动属性

2009-08-12 18:28:09

C#事件处理程序

2009-08-21 15:27:11

C# DataGrid

2009-08-06 15:52:11

C#调用外部进程

2009-09-01 17:08:35

C# Color枚举

2009-09-03 16:55:58

C#引用类型

2009-08-20 16:45:03

C#哈希值
点赞
收藏

51CTO技术栈公众号