Can you summarize the following document?
        
  C#的發音為“C sharp”,“#”讀作“sharp”(),命名啟發於音樂上的音名“C♯”,在音樂中“C♯”表示C升半音,為比C高一點的音節,且“#”形似4個加號,微軟藉助這樣的命名,以表示C#在一些語言特性方面對C++的提升的意思。  由於顯示器(標準字型、瀏覽器等)的技術限制,且大部分的鍵盤配置上不存在升記號(♯),所以井號(#)被用於此程式語言的名稱中,約定在ECMA-334 C#語言規範中。

  ECMA標準列出的C#設計目標:

  原Borland公司的首席研發設計師安德斯·海爾斯伯格(Anders Hejlsberg)在微軟開發了Visual J++ 1.0,很快的Visual J++由1.1版本升級到6.0版。SUN公司認為Visual J++ 違反了Java開發平臺的中立性,對微軟提出了訴訟。2000年6月26日微軟在奧蘭多舉行的“職業開發人員技術大會”(PDC 2000)上,發表新的語言C#。C#語言取代了Visual J++,語言本身深受Visual Basic、Java、C和C++ 的影響。

  相對於C和C++,這個語言在許多方面進行了限制和增強:

  針對於.NET SDK 2.0(相對應於ECMA-334標準第三版),C# 的新特性有:

  分部類別將類別的實現分在多個檔案中。該概念於C# 中首次出現,除了能將一個類別的成員分開存放,還使ASP.NET中的程式碼後置得以實現。程式碼後置實現了HTML程式碼和後臺互動程式碼的分離。  file1.cs:  public partial class MyClass1 file2.cs: public partial class MyClass1 } 分部類別這個特性允許將一個類別的編寫工作分配給多個人,一人寫一個檔案,便於版本控制。它又可以隔離自動生成的程式碼和人工書寫的程式碼,例如設計窗體應用程式時。

  泛型,或引數化型別,是被C#支援的.NET 2.0特性。不同於C++模版,.NET引數化型別是在執行時被例項化,而不是編譯時,因此它可以跨語言,而C++模版卻不行。它支援的一些特性並不被C++模版直接支援,比如約束泛型引數實現一個介面。另一方面,C# 不支援無型別的泛型引數。不像Java中的泛型,在CLI虛擬機器中,.NET generics使用具化生成泛型引數,它允許優化和儲存型別資訊。

  靜態類別它不能被例項化,並且只能有靜態成員。這同很多過程語言中的模組概念相類似。

  一種新形式的迭代器它提供了函數語言程式設計中的generator,使用codice_1  類似於Python中使用的codice_2 // Method that takes an iterable input (possibly an array) // and returns all even numbers. public static IEnumerable<int> GetEven(IEnumerable<int> numbers)

  匿名方法類似於函數語言程式設計中的閉包。 public void Foo(object parameter)

  委託簽名的協變和逆變,

  例子: string status = string.Empty;  public string Status

  可空型別(跟個問號,如codice_3)允許設定codice_4給任何類型別。 int? i = null; object o = i; if(o == null) else

  (codice_5)用於如果類別不為空值時回傳它自身,如果為空值則返回之後的操作 object nullObj = null; object obj = new Object(); return nullObj?? obj; // returns obj 主要用作將一個可空型別賦值給不可空型別的簡便語法 int? i = null; int j = i?? 0; // Unless i is null, initialize j to i. Else (if i is null), initialize j to 0.

  C# 3.0釋出於2007年10月17日,是.NET Framework 3.5的一部分,它的新特性靈感來自於函數語言程式設計語言,如:Haskell和ML,並廣泛地引入了Language Integrated Query(LINQ)模式到通用語言執行庫中e.

  語言整合查詢(英語:Language Integrated Query,縮寫:LINQ): 上下文相關關鍵字"codice_6, codice_7, codice_8"可用於查詢SQL、XML、集合等。這些識別符號在LINQ上下文中被作為關鍵字,但是它們的增加不會破壞原有的名為codice_6、codice_7或codice_8的變數。

  Customer c = new Customer(); c.Name = "James";  可寫作:  Customer c = new Customer() { Name="James" };

  MyList list = new MyList(); list.Add(1); list.Add(2); 可寫作 MyList list = new MyList { 1, 2 }; 假設codice_12實現了codice_13且有一個codice_14方法method

  var x = new { Name="James" };

  區域性變數型別推斷:var x = new Dictionary<string, List<float»(); 等同於 Dictionary<string, List<float» x = new Dictionary<string, List<float»(); 它只是一個語法糖,這個特性被匿名型別宣告時所需要

  Lambda表示式(無函式名稱的物件方法在程式語言中的表達語法):  listOfFoo.Where( ) listOfFoo.Where(x => x.Size > 10);  編譯器翻譯Lambda表示式為強型別委託或強型別表示式樹.

  編譯器將自動生成私有變數和適當的getter(get訪問器)和setter(set訪問器),如:  public string Name

  擴充套件方法指,一個靜態類包含this關鍵字作為方法的第一引數時,這個方法將被新增到該this的型別中: public static class IntExtensions int foo = 0; foo.PrintPlusOne();

  允許程式碼生成器生成方法宣告作為擴充套件點,如果有人在另一個部分類實現了它才會被包含於原始碼編譯。  例子:  partial class C partial class C

  

  C# 4.0新增dynamic關鍵字,提供動態程式設計(dynamic programming),把既有的靜態物件標記為動態物件,類似javascript, Python或Ruby。  dynamic關鍵字標記的欄位被處理成一個特殊包裝的object物件,它取消了CLI的編譯時型別檢查 dynamic calc = GetCalculator(); int sum = calc.Add(10, 20);

  public StreamReader OpenFile(  呼叫OpenFile時,順序可以完全顛倒:  OpenFile(bufferSize: 4096, path: "foo.txt");

  在C#中開啟一個Word檔案:  static void Main(string[] args) {  在C#中指定Excel的某一格文字:  excelObj.Cells[5, 5].Value = "This is sample text";

  C# 4.0支援協變和逆變,例如在泛型介面可以加上in、out修飾字。

  加入 out 變數;能夠直接宣告一個變數在它要傳入的地方,當成一個 out 的引數

  C#通常不被編譯成為能夠直接在計算機上執行的二進位制原生代碼。與Java類似,它被編譯成為中間程式碼(Microsoft Intermediate Language),然後通過.NET Framework的虛擬機器——被稱為通用語言執行庫——執行。  所有的.Net程式語言都被編譯成這種被稱為通用中間語言的中間程式碼。因此雖然最終的程式在表面上仍然與傳統意義上的可執行檔案都具有“.exe”的字尾名。如果計算機上沒有安裝.Net Framework,那麼這些程式會彈出對話方塊,要求使用者下載.net framework。  在程式執行時,.Net Framework將中間程式碼翻譯成為二進位制機器碼,從而使它得到正確的執行。最終的二進位制程式碼被儲存在一個緩衝區(Buffer)中。所以一旦程式使用了相同的程式碼,那麼將會呼叫緩衝區中的版本。這樣如果一個.Net程式第二次被執行,那麼這種翻譯不需要進行第二次,速度明顯加快。

  微軟公司已經向ECMA申請將C#作為一種標準。在2001年12月,ECMA釋出了ECMA-334 C#語言規範。C#在2003年成為一個ISO標準(ISO/IEC 23270)。現在有一些獨立的實現正在進行,包括:

  下面是一個在命令列上輸出Hello World的小程式,這種程式通常作為開始學習程式語言的第一個步驟:  using System;  namespace ConsoleApp1

  C# 有5個著名的編譯器(compilers):
C#是微軟推出的一種基於.NET框架的、物件導向的高階程式語言。C#是一種由C和C++衍生出來的物件導向的程式語言。它在繼承C和C++強大功能的同時去掉了一些它們的複雜特性,使其成為C語言家族中的一種高效強大的程式語言。C#以.NET框架類庫作為基礎,擁有類似Visual Basic的快速開發能力。C#由安德斯·海爾斯伯格主持開發,微軟在2000年釋出了這種語言,希望藉助這種語言來取代Java。C#已經成為Ecma國際和國際標準組織的標準規範。