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

C#3.0中新匿名类型特性初体验,第1张

C#3.0中新匿名类型特性初体验,第2张

在去年的PDC2005上,在发布C#2.0 (C# Whidbey)的同时,微软也展示了他们在C# 3.0上的一些计划。参考语言集成查询(LINQ)等一系列新的语言特性,Redmond还引入了一个新特性——匿名类型。本文详细介绍了匿名类型。

匿名类型定义

# 3.0规范将匿名类型描述为从对象初始化器自动推断和生成的元组类型。在你能完全理解这个定义之前,你需要知道“对象初始化器”的概念,这是匿名类型特征的基础。

对象初始化器为对象的一个或多个字段或属性赋值。这意味着你可以通过一系列赋值操作比如{a=10,b=20}来指定一个对象的一系列属性。换句话说,匿名类型不存在,也没有在代码中显式指定。

请注意,编译器在编译时创建匿名类型,而不是在运行时创建。

你可以用ILDASM(IL decomposer)分解它得到:

var p1 = new {Name = "A ",Price = 3 };

在编译时,编译器使用对象初始值设定项推断的属性来传输新的匿名类型。因此,新类型将具有名称和价格的属性。并且会自动生成Get Set方法和相应的存储这些属性的私有变量。在运行时,将创建这种类型的实例,并且该实例的属性将被设置为在对象初始化器中指定的值。

# C内部

你可能会惊讶地发现,你只能定义一些属性的名称和它们的值,C# 3.0会自动从它们创建类。这是怎么做到的?检查编译器的处理。

像这样开始一行代码:

var p1 = new {Name = "A ",Price = 3 };

当C# 3.0编译器遇到这样的请求时,它会在后台将其翻译成更清晰的表达式,如下:

class __Anonymous1
{
私有字符串名称;
private int price;

公共字符串名称{ get { return name} set { name = value} }
public int Price { get { return Price;} set { price = value} }
}
_ _ anonymous 1 P1 = new _ _ anonymous 1();
p1。Name = " A
pt。价格=3

范例学习

您需要安装Visual Studio 2005和。net 2.0,然后你可以从这里下载LINQ技术的预览版。

如果安装了Visual Studio 2005,在Visual C#下还可以看到三个与LINQ预览版相关的工程模板:LINQ控制台应用程序、LINQ Windows应用程序、LINQ库。

您可以创建使用匿名类型的项目,如下所示:

1.打开Visual Studio 2005编辑器,新建一个项目,选择LINQ控制台作为项目模板;

2.将新项目命名为AnonTypes,然后单击OK;

3.在编辑器中输入以下代码:

//program . cs
使用System
使用系统。查询;
使用系统。Data . DLinq

namespace anon types
{
class Program
{
static void Main(string[]args)
{
var P1 = new { Name = " A ",Price = 3 };
控制台。WriteLine("Name = {0}\nPrice = {1} ",p1。名称,p1。价格);
控制台。ReadLine();
}
}
}

4.编译程序

5.执行程序并获得以下结果:

Name = A
Price = 3

如果您没有Visual Studio 2005,仍然可以通过命令行编译代码:

C:\Program Files\LINQ预览\ Bin \ CSC . exe
/reference:" C:\ Program Files \ LINQ预览\Bin\ System。data . dlinq . dll "
/reference:System . dll
/reference:" C:\ Program Files \ LINQ预览\Bin\System。query . dll " "/br/]/out:anon types . exe/target:exe program . cs

尽管您没有在代码中明确定义一个类,但C#编译器会自动执行以下操作:

1.解析类型

2.创建一个新类(带有名称和价格属性)

3.使用此类初始化新的对象

4.将传递的参数分配给对象。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C#3.0中新匿名类型特性初体验

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情