程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介紹

《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介紹

編輯:關於C#

前言

C#3.0是一門面向對象的編程語言,具有多用途和類型安全等特 征。為實現開發和學習的高效性,她在語言的簡單,易表達,以及可編程性上做 了很大努力。使得新人能夠很快入門,開發者能夠快速開發出程序。但這些並不 是損害語言的功能為前提的。

正文

one Section  C#的面向對 象性(Object Orientation)

C#同JAVA一樣是面向對象的語言,具有封裝 (encapsulation),多態(polymorphism),繼承(polymorphism)的特性。但是她 也有著區別其它面向對象語言的特點。

a.統一的類型系統(Unified type system)

就是說所有的類型(Type)都是共享一個通用基礎類型(Common base Type).無論值類型或引用類型就是繼承自System.object.而object所擁 有的方法所有類型都可以使用,如:ToString(),Equals()等。

b.類 (Class)和接口(Interface)

在傳統的面向對象語言中只有類這一種表現 形式,而在C#(Java)中卻有了接口(Interface),接口是一種只有定義沒有實現 的類,由於C#是一種單類繼承語言,所以接口就顯得格外有用,一個類可以繼承 多個接口,彌補了單類繼承帶來的不足。(單類繼承應該是語言設計者有意這麼 做的,大概是為了保證類的純淨)。

c.屬性(Properties),方法(Methods) 和事件(Events)

傳統的面象對象語言只有Methods,而C#增加了屬性和方 法,這些特性豐富了我們編程,特別是做一些組件和控件開發的時候就顯得特別 有用。

two section C#的類型安全(Type Safety)

C#是一門強類 型語言,也就是說你定義了Int參數的方法,不用用float參數去調用。編譯器 (Complier)會去強制做類型檢查,不匹配的類型是會拋出異常(Exception)並提 示錯誤,變量的定義也是如此。隨著VS的IDE功能不斷強大,已經提供了智能感 知(IntelliSense)的功能,讓我們提前排除這些錯誤。

另外在c#3.0中出 現了Var,但這也是一種強類型,編譯器會根據上下文,進行類型推斷出她的類 型。

three section .net的內存管理(Memory Management)

C#運 行在一個運行時(Common Lanague Runtime)上,這個CLR具有強大的功能,她幫 我們管理著程序所用的內存。她有著內存管理,垃圾回收,線程管理等功能。這 樣就方便了我們編程,不需要想C++那樣需要自己寫大量的代碼來釋放資源,所 以理論上時不會出現內存洩漏的情況的。

但是我個人覺最好不要偷懶, 象一些昂貴的資源還是手動的釋放比價好,比如:對打印機的調用,還有多線程 管理.防范式編程還是需要的。

CLR的垃圾回收一般是有兩個線程來運作 的,對於普通的對象的回收器就是直接覆蓋堆棧,而對比較昂貴的資源暫時無法 回收的,就會放到另外一個線程上,等到安全點的來臨時進行回收。這方面可以 到網上找找介紹資料。

four section C#的多平台支撐(Platfrom Support)

C#和CLR都是符合ECMA的標准。 C#的代碼通常是運行在windows 平台上,但是卻不妨礙她運行在其它的系統上如:Linux, Solaris, Mac OS X。.net framework為我們提供了統一的編程模型,所以我們只要針對.net編程 ,而不需要考慮系統的差異性。

C#的代碼也可以運行在Silverlight這個 宿主(host)上,她是微軟新推出的一項技術。

five section C#和通用語 言運行時(CLR)的關系

C#是.運行在CLR上的眾多語言之一,她依賴著.net 提供的內存管理等服務。

six section 通用語言進行時(CLR)和.net Framework的關系

.net framework 是由CLR和一大堆,一系列的類組成。 這個巨大的類庫又分成了核心類(Core libraries)和應用類(applied libraries),應用類是依靠核心類的。

如圖:(圖片來自書)

用.net上任何語言寫的代碼都會被編譯成中間語言(Intermediate Language),即IL。這些中間語言以及他們的配置信息(type information)和原 數據(MetaData)都會一起打包成可執行文件(exe)或程序集文件(dll),放在CLR上 執行。

當CLR要執行代碼時,首先是加載程序集(Assembly),通過CLR的 即時編譯器(Just-In-Time)把IL轉換成適合CPU特點運行的機器碼.

seven section  C#3.0給我們帶來了那些新特性?

C#3.0新特性的重中之重就 是Linq(Language Integrated Query capabilities)了,她的前身是Comega,主 要設計者是Erik Meijer,她和Omega有相似之處。

Linq的語法特征跟SQL 語法達到95%的相似,但用法以及語意卻有出入,編譯器能夠對她做出很好的語 法檢查。

Linq可以對本地的集合(Collections),和遠端的數據庫(DB)和 XML,進行查詢分析。

C#3.0還有如下新特性。

a.Lambda 表達式 (Lambda Expressions)

例如: Func<int,int> square = x => x * x;
Console.WriteLine (square(3)); // 9

b.擴 展方法(Extensions Method)

例如: string[] names = { "Tom", "Dick",  "Harry" };
IEnumerable<string> filteredNames = names.Where (n =>  n.Length >= 4);

例子有點問題,體現不了擴展方法的特性 。

比如:Int類型,我們想在它裡面加自己的方法myMethod(),以後調用 Int類型的時候,智能提示就是出現myMethod(),就可以用到這個。

c.隱式類型變量(Implicitly typed local variables)

例如 :

var filteredNames = names.Where (n => n.Length  == 4);

也就是Var。

d.推算分析(Query comprehension)

這個是我的叫法,她是Linq的語法,如:from,select ,in,group by 之類的。

例如:

var filteredNames =  from n in names where n.Length >= 4 select  n;

e.匿名類(Anonymous types)

就是我們無需象傳統的 那樣定義一個類,象定義一個臨時變量定義一個有結構的類。

她只是為 方便我們臨時使用。以後會細說。

例如:

var query =  from n in names where n.Length >= 4
            select new {
                         Name = n,
                         Length =  n.Length
                       };

var dude = new { Name = "Bob", Age = 20  };

f.對象初始化器(Object initializers)

這個是方 便我定義對象時,省去一大堆的構造器。同時也方便了我們實例化。

例 如: Bunny b1 = new Bunny { Name="Bo", LikesCarrots=true,  LikesHumans=false };

g.隱式類型數組(Implicitly typed  arrays)

這個跟隱式類型變量定義差不多,只是她是數組。

例 如: var dudes = new[]
{
   new { Name = "Bob", Age = 20 },
   new { Name = "Rob", Age = 30 }
};

h.自動屬性(Automatic properties)

又一個語法糖 (syntactic sugar),為了我們這些代碼工人省力而做的。

例 如:

public class Stock
{
 // C# 3.0:
              public decimal X { get; set; }

 // C# 2.0:
              private decimal y;
              public decimal Y
              {
                get { return y; }
                set { y = value; }
              }
}

I.部分方法(Partial methods)

這用處就是我們一個方 法裡可能需要調用另外一個未定義或定義好的方法,她可能暫時用不上。部分方 法就是為她設計的。

例如:

partial class PaymentForm
{
partial void ValidatePayment (decimal amount); //部分方法的申明
}
 ///部分方法的定義
partial class PaymentForm
{
partial void ValidatePayment (decimal amount)
{
if (amount > 100)
}
}
///調用
Static void Main()
{
PaymentForm form=new PaymentFrom();
Form.ValidatePayMent(5.3); ///如果沒有定義上面的方法,也不會報錯。
}

j.表達樹(Expression trees)

這個不多說了,以後會說 到。

例如:

string[] names = { "Tom", "Dick", "Harry" };
IEnumerable<string> filteredNames =                 // Include only names
 Enumerable.Where (names, n => n.Length >= 4); // of >= 4 characters.

以上都c#3.0新出的特性,行內都說是語法糖。呵呵 !以後的文章會詳細說這些東西的。

後記

本人學習中,錯誤難免 ,敬請指教,謝謝!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved