科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件C# 3.0中新匿名类型特性初体验

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在发布C#2.0 (C# Whidbey)的同时,微软也同时展示了它们在C# 3.0上的一些计划。

作者:维维编译 来源:天极开发 2007年11月11日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
 深入解析代码

  为了了解编译器如何创建一个新类的,打开ILDASM(在C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin下)并且选择最近的编译程序集,AnonTypes.exe。打开树状视图,你可以看到如图1所示的视图:


图1

  如果你仔细看,ILDASM展示了一个匿名类型"<Projection>f__0"是如何被创建的。和类同时被创建的是私有变量_Name和_Price。对这两个变量的Get和Set方法也同时被创建,他们也拥有属性Name和Price。

  双击任何方法或者变量来看的清楚一些,如你点击Name属性,你将会看到如下代码:

.property instance string Name()
{
.get instance string AnonTypes.Program/
'<Projection>f__0'::get_Name()
.set instance void AnonTypes.Program/
'<Projection>f__0'::set_Name(string)
} // end of property '<Projection>f__0'::Name

  多个匿名类型

  如果你创建了多个相似的匿名类型,C#编译器会聪明的发现这一点,只生成一个类和它的两个实例,比如你输入如下代码:

using System;
using System.Query;

using System.Data.DLinq;

namespace AnonTypes
{
 class Program
 {
  static void Main(string[] args)
  {
   var p1 = new {Name = "A", Price = 3};
   var p2 = new {Name = "A", Price = 3};

   Console.WriteLine("Name = {0}\nPrice = {1}",p1.Name, p1.Price);
   Console.ReadLine();
  }
 }
}


  当你编译完并用ILDASM打开的时候,结构如下所示:


图2

  你可以看到,因为声明是类似的,所以C#只创建了一个匿名类,因而优化了程序。但是如果它们不是很类似的话,就会有两个匿名类。

  稍微修改以上代码,如下:

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


图3

  你可以看到,C#创建了两个类,<Projection>f__0 and <Projection>f__1。

  总结

  这里我们可以看到,匿名类型为程序员提供了一种机制,该机制使得你无须清晰的声明类结构。而且,C# 3.0编译器非常的智能化,在你拥有多个相似的匿名类型时只创建一个匿名类型从而达到了优化程序的目的。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章