惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

博客园 - Mason

[JavaScript]几种常用的表单输入判断 - Mason - 博客园 胡子决定编程语言运势[zt] 恢复SQL Server系统数据库 SQL server服务器大内存配置 分页SQL Server存储过程 《第3次机器人大战α》民间汉化版曝光 ASP.NET程序中常用的三十三种代码 - Mason - 博客园 探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页 详述SQL Server 补丁安装常见问题 SQL SERVER实用技巧 SQL Server SQL语句导入导出大全 SQL Server数据库安全规划全攻略 曹操用什么统一全国?[转摘163] 几种SqlServer数据库分页方式[转载] SSO是门户的基础 关于MSSQL占用过多内存的问题 利用Visual C#打造一个平滑的进度条 .Net平台下开发中文语音应用程序 用C#生成中文汉字验证码的基本原理
Visual C# 3.0 新特性概览(一)
Mason · 2005-11-22 · via 博客园 - Mason

在发布visual Studio 2005和C#2.0之后,微软公司又马不停蹄的展示了人们所期望的C#的下一代版本:C# 3.0。尽管C# 3.0并没有标准化,微软还是在PDC(专业程序员会议)发布了一个预览版本,因此心急的程序员可以看到一些所期望的特性,这也是本文所讨论的主要内容:

  ·隐式类型本地变量

  ·匿名变量

  ·扩展方法

  ·对象和Collection初始化符

  ·Lambda表达式

  ·查询表达式

  ·表达式树

  隐式类型本地变量

  C# 3.0引进了一个新的关键字叫做"Var"。Var允许你声明一个新变量,它的类型是从用来初始化符变量的表达式里隐式的推断出来的。也就是说,如下的表达式是有效的格式:

var i = 1;

  这一行使用了1来初始化符变量i。注意这里i被强类型到整型,它不是一个对象或者VB6的变量,也不带有其他对象或者变量的负载。
为了保证使用var关键字进行声明的变量的强类型特性,C#3.0要求你将赋值(初始化符)放到和声明(声明符)的同一行。同样,初始化符必须是一个表达式,不能是一个对象或者collection初始化符,也不能为null。如果多个声明符对同一个变量存在,那么它们必须在编译时被视作相同类型。

  另一方面,隐式类型数组,可以使用一点不同的格式,如下所示:

var intArr = new[] {1,2,3,4} ;

  上面一行的代码将声明intArr为int[].

  var关键字允许你使用匿名类型的实例,因而这些实例就是静态类型的。所以,当你创建一个包含一组数据的对象的实例的时候,你不必要预先定义一个类可以同时支持这个结构和在一个静态类型变量里的数据。

  匿名变量

  C# 3.0使得你可以灵活的创建一个类的实例,而无需先写这个类的代码。所以你可以这样写代码:

new {hair="black", skin="green", teethCount=64}

  上一行代码,通过new关键字的帮助,创建了有三个属性的类型:hair,skin和teethCount。这样C#编译器就会创建一个类如下:

class __Anonymous1
{
 private string _hair = "black";
 private string _skin = "green";
 private int _teeth = 64;
 public string hair {get { return _hair; } set { _hair = value; }}
 public string skin {get { return _skin; } set { _skin = value; }}
 public int teeth {get { return _teeth; } set { _teeth = value; }}
}

  事实上,如果另外一个满足了相同的名称和类型顺序的匿名类型也被创建了,编译器也会聪明的只创建一个匿名类型来支持两个实例来使用。同样,因为实例都是一个类的简单实例,它们可以进行互换因为类型实际上是一样的。

  现在你拥有了这个类,但是你还需要一些东西来支持以上的类的某个实例。这就是"var"关键字的作用。它让你拥有一个以上匿名变量的实例的一个静态类型实例。这里有一个简单好用的匿名类型的使用例子:

var frankenstein = new {hair="black", skin="green", teethCount=64}

  扩展方法

  扩展方法使你能够使用额外的静态方法来扩展各种类型。不过它们是非常有限的,也只能在实例方法不足够的情况下才作为候补使用。

  扩展方法只能在静态类中被声明,并且以关键字"this"放在方法的第一个参数前来标识,如下就是一个有效的扩展方法的例子:

public static int ToInt32(this string s)
{
 return Convert.ToInt32(s) ;
}

  如果一个包含以上方法的静态类被使用"using"关键字引进,ToInt32犯法将会出现在已有的类型中(虽然比现有的实例方法优先级低),你可以这样编译和执行代码:

string s = "1";
int i = s.ToInt32();

  这使得你可以充分享用各种以有的内建的或者定义的类型的扩展特性,并且给它们加上新的方法。