起源
C#(讀做 "C sharp",中文譯音暫時沒有.專業人士一般讀"C sharp",
很多非專業一般讀"C井"。C#是一種安全的、穩定的、簡單的、優雅的,由C和C++衍生出來的
面向對象的程式語言。它在繼承C和C++強大功能的同時去掉了一些它們的複雜特性(例如沒有宏和模版,不允許
多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優雅的語法風格、創新的語言特性和便捷的
面向組件編程的支持成為.NET開發的首選語言。並且C#成為ECMA與ISO標準規範。C#看似基於C++寫成,但又融入其它語言如Pascal、Java、VB等。
微軟c#語言定義主要是從C和
C++繼承而來的,而且語言中的許多元素也反映了這一點.C#在設計者從C++繼承的可選選項方面比Java要廣泛一些(比如說struts),它還增加了自己新的特點(比方說
原始碼版本定義).但它還太不成熟,不可能擠垮Java.C#還需要進化成一種開發者能夠接受和採用的語言.而微軟當前為它的這種新語言大造聲勢也是值得注意的.大家的反應是:"這是對Java的反擊." C#更像Java一些,雖然微軟在這個問題上保持沉默.這也是意料中的事情,我覺得,因為Java很成功而使用Java的公司都報告說它們在生產效率上比C++獲得了提高. Java所帶來的巨大影響和大家對它的廣泛接受已經由工作於這種語言和平台之上的程式設計師數量明顯的說明了(估計世界範圍內共有兩百五十萬程式設計師使用Java).由這種語言寫成的應用程式的數量是令人驚訝的並已經滲透了每一個級別的計算,包括無線計算和行動電話(比如日本發明的Java電話).C#能夠在用戶領域獲得這樣的禮遇嗎?我們必須等待並觀望,就像已經由SSI公司的CEO和主席Kalpathi S. Suresh指出來的那樣,"我發現所有這些都是漸進的.如果C#不存在,我們總能回到Java或C和C++.這些都不完全是新技術;它們在更大的意義上來說只是大公司製造的市場噱頭.我們必須給他們時間安頓下來看看這些是不是真的對IT工業有什麼影響."
特點分析
C#及其特點
C#是
微軟公司在2000年6月發布的一種新的程式語言,並定於在微軟職業開發者論壇(PDC)上登台亮相。C#是微軟公司研究院Anders Hejlsberg的最新成果。C#看起來與Java有著驚人的相似;它包括了諸如單一繼承、界面、與Java幾乎同樣的語法,和編譯成
中間代碼再運行的過程。但是C#與Java有著明顯的不同,它借鑑了Delphi的一個特點,與COM(
組件對象模型)是直接集成的,而且它是微軟公司.NET windows網路框架的主角。
C# 是微軟對這一問題的解決方案。C#是一種最新的、
面向對象的程式語言。它使得程式設計師可以快速地編寫各種基於MICROSOFT .NET平台的應用程式,MICROSOFT .NET提供了一系列的工具和服務來最大程度地開發利用計算與通訊領域。
正是由於C#面向對象的卓越設計,使它成為構建各類組件的理想之選——無論是高級的商業對象還是系統級的應用程式。使用簡單的C#語言結構,這些組件可以方便的轉化為XML網路服務,從而使它們可以由任何語言在任何作業系統上通過INTERNET進行調用。
最重要的是,C#使得C++程式設計師可以高效的開發程式,而絕不損失C/C++原有的強大的功能。因為這種繼承關係,C#與C/C++具有極大的相似性,熟悉類似語言的開發者可以很快的轉向C#。
C#是
微軟公司在2000年7月發布的一種全新且簡單、安全、
面向對象的程式設計語言,是專門為.NET的套用而開發的語言。它吸收了C++、Visual Basic、Delphi、Java等語言的優點,體現了當今最新的
程式設計技術的功能和精華。C#繼承了C語言的語法風格,同時又繼承了C++的
面向對象特性。不同的是,C#的對象模型已經面向Internet進行了重新設計,使用的是.NET框架的類庫;C#不再提供對
指針類型的支持,使得程式不能隨便訪問
記憶體地址空間,從而更加健壯;C#不再支持
多重繼承,避免了以往類層次結構中由於多重繼承帶來的可怕後果。.NET框架為C#提供了一個強大的、易用的、
邏輯結構一致的程式設計環境。同時,
公共語言運行時(Common Language Runtime)為C#程式語言提供了一個託管的運行時環境,使程式比以往更加穩定、安全。其特點有:
· 語言簡潔。
· 保留了C++的強大功能。
· 語言的自由性。
· 支持跨平台。
· 與XML相融合。
C#與C++的比較
C#對C++進行了多處改進,主要區別如下:
· 編譯目標:C++代碼直接編譯為本地
可執行代碼,而C#默認編譯為
中間語言(IL)代碼,執行時再通過Just-In-Time將需要的模組臨時編譯成本地代碼。
·
記憶體管理:C++需要顯式地刪除動態分配給堆的記憶體,而C#不需要這么做,C#採用垃圾回收機制自動在合適的時機回收不再使用的記憶體。
·
指針:C++中大量地使用指針,而C#使用對類實例的引用,如果確實想在C#中使用指針,必須聲明該內容是非安全的。不過,一般情況下C#中沒有必要使用指針。
· 字元串處理:在C#中,字元串是作為一種基本數據類型來對待的,因此比C++中對字元串的處理要簡單得多。
· 庫:C++依賴於以繼承和模板為基礎的標準庫,C#則依賴於.NET基庫。
· C++允許類的
多繼承,而C#只允許類的單繼承,而通過接口實現多繼承。
·C#亦應該於網頁設計。如ASP與ASP.NET。而C++則無。
在後面的學習中會發現,C#與C++相比還有很多不同和改進之處,包括一些細節上的差別,這裡就不一一列舉了。
C#與Java的比較
· C#中的基本類型都是面向對象的。
· C#具有比Java更強大的功能。
· C#語言的執行速度比Java快。
語法關鍵字
abstract:可以和類、方法、屬性、索引器及事件一起使用,標識一個可以擴展但不能被實體化的、必須被實現的類或方法。
as:一個轉換操作符,如果轉換失敗,就返回null。
base:用於訪問被派生類或構造中的同名成員隱藏的基類成員。
catch:定義一個代碼塊,在特定類型異常拋出時,執行塊內代碼。
checked:既是操作符又是語句,確保編譯器運行時,檢查整數類型操作或轉換時出現的溢出。
const:標識一個可在編譯時計算出來的變數值,即一經指派不可修改的值。
delegate:指定一個聲明為一種委託類型。委託把方法封裝為可調用實體,能在委託實體中調用。
enum:表示一個已命名常量群集的值類型。
event:允許一個類或對象提供通知的成員,他必須是委託類型。
explicit:一個定義用戶自定義轉換操作符的操作符,通常用來將內建類型轉換為用戶定義類型或反向操作,必須再轉換時調用顯示轉換操作符。
extern:標識一個將在外部(通常不是c#語言)實現的方法。
finally:定義一個代碼塊,在程式控制離開try代碼快後執行。參見try和catch。
fixed:在一個代碼塊執行時,在固定記憶體位置為一個變數指派一個指針。
foreach:用於遍歷一個群集的元素。
goto:一個跳轉語句,將程式執行重定向到一個標籤語句。
implicit:一個操作符,定義一個用戶定義的轉換操作符,通常用來將預定義類型轉換為用戶定義類型或反向操作,隱式轉換操作符必須在轉換時使用。
interface:將一個聲明指定為接口類型,即實現類或構造必須遵循的契約。
internal:一個訪問修飾符。
namespace:定義一個邏輯組的類型和命名空間。
operator:用來聲明或多載一個操作符。
out:標識一個參數值會受影響的參數,但在傳入方法時,該參數無需先初始化。
params:聲明一個參數數組。如果使用,必須修改指定的最後一個參數,允許可選參數。
readonly:標識一個變數的值在初始化後不可修改。
ref:標識一個參數值可能會受影響的參數。
sealed:防止類型被派生,防止方法和property被覆載。
sizeof:一個操作符,以byte為單位返回一個值類型的長度。
stackalloc:返回在堆上分配的一個記憶體塊的指針。
struct:是一種值類型,可以聲明常量、欄位、方法、property、索引器、操作符、構造器和內嵌類型。
throw:拋出一個異常。
try:異常處理代碼塊的組成部分之一。try代碼塊包括可能會,拋出異常的代碼。參閱catch和finally關鍵字。
typeof:一個操作符,返回傳入參數的類型。
unchecked:禁止溢出檢查。
unsafe:標註包含指針操作的代碼塊、方法或類。
using:當用於命名空間時,using關鍵字允許訪問該命名空間中的類型,而無需指定其全名。也用於定義finalization操作的範圍。
virtual:一個方法修飾符,標識可被覆載的方法。
volatile:標識一個可被作業系統、某些硬體設備或並發執行緒修改的attribute。
C# 類型體系包含下列幾種類別:
值類型
引用類型
指針類型
值類型的變數存儲數據,而引用類型的變數存儲對實際數據的引用。引用類型也稱為對象。指針類型僅可用於unsafe模式。
通過裝箱和取消裝箱,可以將值類型轉換為引用類型,然後再轉換回值類型。除了裝箱值類型外,無法將引用類型轉換為值類型。
值類型也可以為 null,這意味著它們能存儲其他非值狀態。