首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> C# 入門

C# 首席架構師 Anders Hejlsberg 專訪

     編輯:C# 入門

C# 首席架構師 Anders Hejlsberg 訪談

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

Osborn:

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

Hejlsberg:

首先,C# 不是 Java 的複製品。在設計 C# 期間,我們考察了很多種語言,我們考察了 C++、Java、Modula 2、C,我們還考察了 Smalltalk。很多語言都有我們感興趣的相同的核心思想,比如深度面向物件、簡化物件等等。

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

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

另外一個重要的概念是我所說的「一站購物式軟體」。一旦你用 C# 寫程式碼,你就一體化地寫了一切。不再需要標頭檔、IDL(介面定義語言)檔案、GUID 和複雜的介面。因為它是自包容的單元,所以,一旦你能夠以這種方式編寫自描述的程式碼,你就可以把你的軟體嵌入到 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