程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#首席架構師Anders Hejlsberg訪談

C#首席架構師Anders Hejlsberg訪談

編輯:C#入門知識

7月,O’Reilly編輯John Osborn參加了微軟職業開發者會議。在此,他對著名的工程師、微軟.Net框架C#語言首席架構師Anders Hejlsberg進行了采訪。Anders Hejlsberg因設計PCs上最早的語言之一—Turbo Pascal而廣為人知。他把Turbo Pascal許可給Borland公司,後又率隊創建了Delphi—一個極為成功的可視化的client/server應用設計工具。訪問時在座的還有微軟C#產品經理Tony Goodhew和OReilly的Windows編輯Ron Petrusha。

Osborn:

     我已經看到一些關於C#(發音為"See sharp")的新聞故事,並注意到有很多似乎傾向於這樣的觀點,或理論上說,C#不是Java的克隆就是Java的微軟替代品。如果你來做宣傳的話,你希望人們怎麼評論這門語言?

Hejlsberg:

     首先,C#不是Java的克隆。在設計C#期間,我們考察了很多種語言,我們考察了C++,我們考察了Java,我們考察了Modula 2、C,我們還考察了Smalltalk。很多語言都有我們感興趣的相同的核心思想,比如深度面向對象、簡化對象(object-simplification)等等。

     C#和這些別的語言尤其是Java之間的關鍵不同點是,它非常接近C++,在我們的設計中努力使然。C#從C++直接借用了大多數的操作符、關鍵字和聲明。我們還保留了許多被Java拋棄的語言特性。為什麼Java中沒有枚舉,道理何在?我的意思是,拋棄它們是基於何種理論基礎?在C++中,枚舉顯然是一個很有意義的概念。在C#中,我們保留了枚舉並同樣使其類型安全。並且,枚舉不只是整型,它們實際上是從.NET基類庫裡的System.Enum派生下來的強類型的值類型。如果沒有進行造型轉換,枚舉類型“foo”和枚舉類型“bar”不可互換。我認為這是個重要的差異。我們還保留了操作符重載和類型轉換。C#名字空間的整體結構也非常接近C++。

     但是,超越這些傳統的語言論題,我們設計語言的一個關鍵的目標是使C#面向組件。我們向語言自身加入了你在編寫組件時所需要的所有概念。例如properties(屬性)、methods(方法)、events(事件)、attributes(特性)和documentation(文檔),它們都是一等的語言成分。我們對特性所做的工作是全新且具有創新意義的,利用特性可為任何對象加入有類型的、可擴展的元數據。這在目前任何其它程序語言裡都看不到。C#也是第一個合並XML注釋標簽的語言,編譯器可以用其直接從源碼中生成可讀的文檔。

     另外一個重要的概念是我所說的“一站購物式軟件”(one-stop-shopping software)。一旦你用C#寫代碼,你就一體化地寫了一切。不再需要頭文件、IDL(接口定義語言)文件、GUIDs和復雜的接口。因為它是自包容的單元,所以,一旦你能夠以這種方式編寫自描述的代碼,你就可以把你的軟件嵌入到ASP頁面或植入各種不同的環境,這在以前是不可能的。

     讓我們再回到這些關鍵的組件概念。語言是否應該支持屬性或事件,業界有很多爭論。沒錯,我們是可以用方法表達這種概念。我們可以用諸如“get”或“set”之類的程序塊的命名模式,模擬屬性的行為。我們可以用接口和實現接口的適配器並轉發到對象。這都是可以實現的,正如同可以在C語言裡進行面向對象編程一樣。只是它更加困難,需要更多手工勞動,為了真正表達你的思想,你最終不得不去做所有的工作。我們認為是時候了,應該有門語言使得創建組件變得容易些。最近幾年來,開發人員在創建軟件組件。他們並不是創建整個應用或整個類庫。每個人都是在創建從宿主環境提供的基組件繼承下來的組件。這些組件重載一些方法和屬性,它們處理事件,並把組件安裝回系統。樹立這些概念是關鍵的第一課。

Osborn:

     你最近在介紹C#時,第一張幻燈片上面寫著:“C/C++家族裡第一個面向組件的語言”。

Hejlsberg:

     是的。這是我的首要目標之一。我們談論一切如何都是對象,這也非常關鍵。以前象Smalltalk和Lisp語言都可以這麼做,但代價高昂。我認為C#包含一些優美有趣的創新,以使得組件開發容易些。例如裝箱和拆箱的概念。裝箱可以使一個值類型的值轉換為一個對象,拆箱可以使一個對象轉換為一個簡單類型的值。這在以前或許也有,但我們把它應用於語言的方式是一種優美的創新。

     我們努力避免以“象牙塔”的方式設計C#和.Net框架。我們承受不起重寫我們所有的軟件的負擔。業界也負擔不起,特別是今天我們正轉移到Internet時代。你要善於利用你已經擁有的。所以,我認為互操作性也是關鍵的。我們致力於為程序員提供所有符合Internet標准的可互操作的恰當的解決方案,例如HTTP、HTML、XML以及業已存在的微軟技術。所以你不會有如墜深淵的那一刻—發現新的.NET框架下沒有提供你用的一些東西,或者當你意識到你想利用一些已經存在的API或組件的時候。你已經看到我們已把所有COM互操作能力內建入語言和通用運行時;你已經看到可以使用DllImport特性導入已存在的DLL(動態連接庫);你已經看到即使那些都不能遂你所願,我們也有不安全代碼的概念。不安全代碼允許你編寫使用指針的內聯C代碼,可以做不安全的造型轉換,可以抑制內存從而使其不會被意外地垃圾收集。

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