大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 其他相关 -> Visual C# 3.0 新特性概览

Visual C# 3.0 新特性概览

时间: 2021-07-31 作者:daque

在颁布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();   这使得你不妨充溢享受百般以有的内建的大概设置的典型的扩充个性,而且给它们加上新的本领。 [page_break]c#中步调构造的要害观念为步调、定名空间、典型、分子和步调集。c#步调囊括一个或多个源文献。步调中证明典型,典型包括分子并不妨被构造到定名空间中。类和接口是典型的例子。字段、本领、属性和事变则是分子的例子。当c#步调被编写翻译时,它们被物理地打包到步调会合。步调集的文献扩充名普遍为.exe大概.dll,这在于于它们是实行为运用步调(application),仍旧类库(library)。    示例:  using system;  namespace acme.collections  {   public class stack   {    entry top;    public void push(object data){     top=new entry(top,data);    }    public object pop(){     if (top==null) throw new invalidoperationexception();      object result=top.data;      top=top.next;      return result;    }    class entry    {     public entry next;     public object data;     public entry(entry next,object data){      this.next=next;      this.data=data;     }    }   }  }    在叫作acme.collections的定名空间下,证明名为stack的类,这个类的实足控制名即是acme.collections.stack。它囊括几个分子:一个名为top的字段,两个辨别定名为push和pop的本领,以及一个名为entry的嵌套类。entry类又进一步囊括三个分子:一个名为next的字段,一个名为data的字段,以及一个结构因变量。假设这个示例的源步调被存为acme.cs文献,吩咐动作:  csc /t:library acme.cs    将这个示例编写翻译为类库(不带main进口点的代码),而且爆发一个名为acme.dll的步调集。    步调集囊括中央谈话(intermediate language,il)训令情势的可实行代码,以及元数据(metadata)情势的标记消息。在它实行之前,步调集的il代码将被.net大众谈话运转库(commonlanguage runtime,clr)机动变换成一定处置器的代码。    因为步调集是自刻画的功效单位,它既囊括代码,也囊括元数据,所以,在c#中不须要#include训令和头文献。假设某个c#步调须要援用一定步调会合的大众典型和分子,那么只在编写翻译时大略地援用谁人步调集就不妨了。比方,底下的步调运用来自acme.dll步调会合的acme.collections.stack类:  using system;  using acme.collections;  class test  {   static void main(){    stack s=new stack();    s.push(1);    s.push(10);    s.push(100);    console.writeline(s.pop());    console.writeline(s.pop());    console.writeline(s.pop());   }  }    即使步调被存为test.cs文献,那么,在test.cs被编写翻译时,acme.dll不妨经过/r选项被援用:  csc /r:acme.dll test.cs    如许不妨创造一个名为test.exe的可执路途序集,运转截止如次:    100    10    1    c#承诺一个步调的源文本被存为几个源文献。当多文献的c#步调被编写翻译时,一切的源文献都被一道处置,而且各个源文献从观念上不妨自在地彼此援用,就犹如处置之前,一切的源文献被贯穿成一个大文献。在c#中向前证明是没有需要的,因为即是证明的程序可有可无。c#不控制一个源文献只能证明一个大众典型,也不诉求源文献名必需与该文献中的典型相配合译注1。 

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.