C#(讀作“C Sharp”),C# 是面向對象的、面向組件的程式語言。
C#在2000年6月發布,使用了.NET框架作為運行環境,源於C語言系列,繼承了C和C++強大功能的同時去掉了一些它們的複雜特性(例如,沒有宏以及不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優雅的語法風格、創新的語言特性和便捷的面向組件編程的支持成為.NET開發的首選語言。是由C和C++衍生出來的一種安全的、穩定的、簡單的、優雅的面向對象程式語言。
C#主要套用於桌面應用程式開發、Web應用程式開發、移動應用程式開發、遊戲開發、雲和服務開發、資料庫開發、科學計算、物聯網(IoT)應用程式、人工智慧(AI)應用程式等。
基本介紹
- 外文名:C#
- 語言家族:C
- 類別:面向對象高級程式語言
- 發布時間:2000年6月
- 發布單位:微軟公司
- 開發者:安德斯·海爾斯伯格
- 讀音:C SHARP
概述,歷史發展,設計目標,C#語言及其特點,程式結構,注釋,命名空間,類,Main方法,關鍵字,標識符,語句,數據類型,程式執行,版本介紹,套用,發展前景,
概述
C#是由微軟公司發布的一種由C和C++衍生出來的面向對象的程式語言、運行於.NET Framework和.NET Core(完全開源,跨平台)之上的高級程式設計語言。
歷史發展
C#是微軟公司在2000年6月發布的一種新的程式語言,主要由安德斯·海爾斯伯格(Anders Hejlsberg )主持開發,它是第一個面向組件的程式語言,其源碼會編譯成msil再運行。它借鑑了Delphi的特點,與COM(組件對象模型)是直接集成的,並且新增了許多功能及語法,而且它是微軟公司.NET windows網路框架的主角。
C#最初有個更酷的名字,叫做COOL。微軟從1998年12月開始了COOL項目,直到2000年2月,COOL被正式更名為C#。在1998年,Delphi語言的設計者安德斯·海爾斯伯格帶領著Microsoft公司的開發團隊,開始了第一個版本C#語言的設計。在2000年9月,國際信息和通信系統標準化組織為C#語言定義了一個Microsoft公司建議的標準。最終C#語言在2001年得以正式發布。
原Borland公司的首席研發設計師安德斯·海爾斯伯格在微軟開發了VisualJ++ 1.0,很快Visual J++由1.1版本升級到6.0版。SUN公司認為Visual J++ 違反了Java開發平台的中立性,對微軟提出了訴訟。2000年6月26日微軟在奧蘭多舉行的“職業開發人員技術大會”(PDC2000)上,發表新的語言C#。C#語言取代了Visual J++,語言本身深受 Java、C 和 C++ 的影響。
設計目標
C#旨在設計成為一種“簡單、現代、通用”,以及面向對象的程式設計語言。下面是 C# 的主要設計目標:
簡單易用:C# 的設計目標之一是提供一種簡單易用的語言,使開發人員能夠快速上手並編寫清晰明了的代碼。它採用類似於其他流行程式語言的語法和概念,提供直觀的語言特性和一致的編程模型。
類型安全和記憶體安全:C# 在設計上強調類型安全和記憶體安全。它具有靜態類型檢查和類型推斷機制,可以在編譯時捕獲大部分類型錯誤。此外,C# 在運行時使用垃圾回收器(Garbage Collector)來自動管理記憶體,減少了開發人員需要手動管理記憶體的工作量。
面向對象:C# 是一種面向對象的程式語言,支持封裝、繼承和多態等面向對象的概念。通過類、接口和繼承等機制,開發人員可以組織和抽象代碼,提高代碼的可維護性和可重用性。
可擴展性:C# 的設計目標是支持可擴展的編程模型。它提供了豐富的庫和框架,使開發人員能夠構建複雜的應用程式,並輕鬆集成第三方庫和組件。C# 還支持擴展方法、屬性和索引器等特性,使開發人員能夠擴展現有類型的功能。
跨平台:C# 的設計目標是實現跨平台開發。通過 .NET Core 平台,C# 應用程式可以在多個作業系統上運行,如 Windows、Linux 和 macOS。這使得開發人員能夠在不同的平台上共享代碼和邏輯,提高開發效率和代碼重用性。
集成開發環境(IDE)支持:C# 的設計目標之一是與集成開發環境(如 Visual Studio)緊密集成。Visual Studio 提供了強大的工具和功能,使開發人員能夠輕鬆編寫、調試和部署 C# 應用程式。
C#語言及其特點
C#是的一種程式語言,具有以下突出的特點:
(1)語法簡潔:不允許直接操作記憶體,去掉了指針操作。
(2)徹底的面向對象設計:C#具有面向對象語言所應有的一切特性:封裝、繼承和多態。
(3)與Web緊密結合:C#支持絕大多數的Web 標準,如 HTML、XML、SOAP 等。
(4)強大的安全性機制:可以消除軟體開發中常見的錯誤(如語法錯誤),.NET提供的垃圾回收器能夠幫助開發者有效地管理記憶體資源。
(5)兼容性: C#遵循.NET的公共語言規範(CLS),從而能夠保證與其他語言開發的組件兼容。
(6)靈活的版本處理技術:C#語言本身內置了版本控制功能,因此使開發人員更加容易地開發和維護。
(7)完善的錯誤、異常處理機制:C#提供了完善的錯誤和異常處理機制,使程式在交付使用時能夠更加健壯。
程式結構
C#程式結構大體可以分為注釋、命名空間、類、Main方法、關鍵字、標識符和語句。
注釋
對某行或某段代碼進行說明,編譯器編譯程式時不執行注釋的代碼或文字,主要功能是方便對代碼的理解與維護。
注釋可以分為行注釋、塊注釋、文檔注釋三種。
行注釋
行注釋都以“//”開頭;到行結束有效。
塊注釋
塊注釋通常以“/*”開始,以“*/”結束,注釋的內容放在它們之間,到遇到第一個結束分隔設定有效。
說明:塊注釋有開始標記和結束標記;標記對之間的文本會被編譯器忽略;可以跨任意多行,也可以只包括行的一部分。
文檔注釋
文檔注釋以“///”開始。文檔注釋包含XML文本,可以用於產生程式文檔。
類型 | 開始 | 結束 | 描述 |
單行注釋 | // | 從開始標記到該行行尾的文本被編譯器忽略 | |
帶分隔設定注釋 | /* | */ | 從開始標記到結束標記之間的文本被編譯器忽略 |
文檔注釋 | /// | 這種類型的注釋包含XML文本,可以使用工具生成程式文檔 |
如果注釋的行數較少,一般使用行注釋。對於連續多行的大段注釋,則使用塊注釋。
注意:
注釋可以出現在代碼的任意位置,但是不能分隔關鍵字和標識符。
不允許嵌套注釋,同一時間只能有一個注釋起作用。
命名空間
命名空間
命名空間是一種用於組織和管理代碼的機制。它提供了一種將相關的類型、類、接口、結構體和其他成員組織在一起的方式。通過創建命名空間,您可以避免命名衝突並提供代碼的可組織性、可重用性和可維護性。
命名空間規則:
在命名空間內,每個類型名必須有別於所有其他類型。
命名空間內的類型稱為命名空間的成員。
一個源檔案可以包含任意數目的命名空間聲明,可以順序也可以嵌套。
命名空間不是封閉的。可以在源檔案的後面或另一個源檔案中再次聲明。
一個命名空間可以是另一個命名空間的成員。
命名空間名稱
把一組類型分組在一起並給它們一個名稱,稱為命名空間名稱。命名空間名稱應該描述命名空間的內容並和其他命名空間名稱相區別。
命名空間名稱可以是任何有效標識符;命名空間名稱可以包括句點符號,用於把類型組織成層次。
類
類
類是一種自定義的數據類型,是 C#語言的核心和基本構成模組,包含了一組屬性和方法。屬性用來描述類的特徵,方法用來描述類的行為。可以使用class關鍵字來定義一個類。
類名
類名是一種標識符,必須符合標識符的命名規則。類名要能夠體現類的含義和用途。類名一般採用第一個字母大寫的名詞,也可以採用多個詞構成的組合詞。
Main方法
Main 方法是程式的入口點,C#程式中必須包含一個Main 方法,在該方法中可以創建對象和調用其他方法,一個 C#程式中只能有一個Main 方法,並且在 C#中所有的Main 方法都必須是靜態的。
可以用3個修飾符修飾Main 方法,分別是 public、static 和 void。
public:說明 Main 方法是共有的,在類的外面也可以調用整個方法。
static:說明方法是一個靜態方法,即這個方法屬於類的本身,而不是這個類的特定對象。調用靜態方法不能使用類的實例化對象,必須直接使用類名來調用。
void:此修飾符說明方法無返回值。
關鍵字
關鍵字是指在 C#語言中具有特殊意義的單詞,它們被 C#設定為保留字,不能隨意使用。在 C# 中,有些關鍵字在代碼的上下文中有特殊的意義,如 get 和 set,這些被稱為上下文關鍵字(contextual keywords)。下表列出了C# 中常見的保留關鍵字(Resened kevwords)和下文關鍵字(Contextual Keywords)。
abstract | as | base | bool | break | byte | case |
catch | char | checked | class | const | continue | decimal |
default | delegate | do | double | else | enum | event |
explicit | extern | false | finally | fixed | float | for |
foreach | goto | if | implicit | in | int | interface |
internal | is | lock | long | namespace | new | null |
object | operator | out | override | params | private | protected |
public | readonly | ref | return | sbyte | sealed | short |
sizeof | stackalloc | static | string | struct | switch | this |
throw | true | try | typeof | uint | ulong | unchecked |
unsafe | ushort | using | virtual | void | volatile | while |
add | allas | ascending | descending | dynamic | from | get |
global | group | into | join | let | orderby | partial |
remove | select | set |
常用關鍵字注釋:
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#的類庫名稱相同。
語句
語句是描述一個類型或告訴程式去執行一個動作的原始碼指令,分為簡單語句和塊。
簡單語句
簡單語句以一個分號結束。
例如,下面的代碼是一個由兩條簡單語句組成的序列。第一條語句定義了一個名稱為var1的變數,並初始化它的值為5。第二條語句列印變數var1的值到螢幕視窗。
int var1 = 5;
System.Console,WriteLine("The value of var1is {0}",var1);
塊
塊是一個由成對大括弧包圍的0條或多條語句序列,它在語法上相當於一條語句。
可以使用之前示例中的兩條語句創建一個塊。用大括弧把語句包圍起來,如下面的代碼所示:
{
int var1 = 5;
System.Console.WriteLine("Thevalue of var1 is (0}",var1);
}
注意:
可以在任何語法上只需要一條語句而你需要的行為又要求一條以上的簡單語句的情況下使用塊。
有些特定的程式結構只能使用塊。在這些結構中,不能用簡單語句替代塊。
簡單語句以分號結束,但塊後面不跟分號。
數據類型
值類型
基本數據類型:C#擁有比C/C++或者Java更廣泛的數據類型。這些類型是bool、byte、sbyte、short、ushort、int、uint、long、ulong、float、double和decimal,所有這些類型像Java一樣都有一個固定的大小,像C和C++一樣,每個數據類型都有有符號和無符號兩種類型。與Java相同的是,一個字元變數包含的是一個16位的Unicode字元。
C#新的數據類型是decimal數據類型,其在 .NET 中被設計用來處理高精度的十進制數運算。它可以存儲最多28到29位的十進制數字,具體取決於數字的值。由於其高精度特性,decimal 類型通常用於需要精確計算的金融和貨幣套用,以避免浮點數運算可能產生的捨入誤差。對於貨幣數據,它能存放28位10進制數字。
Nullable類型,允許用它定義包含null值(即空值)的數據類型,定義一個nullable類型非常類似於定義一個非nullable類型。不同之處在於使用類型修飾符“?”。
比如定義一個整型如下:int myInt = 1;
要使一個整型變數可以存儲一個null值,可以如下聲明:
int? myNullableInt= 1;
元組 (ValueTuple)類型由一個或多個元素組成,每個元素可以是不同的數據類型。定義時需要指定其所有數據成員的類型,或者,可以指定欄位名稱。
引用類型
Object:所有其他類的基類,string是對象類型的派生類型,共享了Object類型提供的基礎功能。
String:是一個非常核心的類,提供了豐富的方法和屬性來處理文本數據。無論何時在程式中寫入一句帶引號的字元串,編譯器會創建一個string對象來保存它。
Record:是一種用record關鍵字聲明的新的引用類型,與類不同的是,Record有著引用類型的支持大對象、繼承、多態等特性,也有著結構的基於值相等的特性。
Delegate: 在C#中,代理(Delegate)是一種特殊的類型,它持有對某個方法的引用。代理允許將方法作為參數傳遞給其他方法,或者將方法作為反饋(Callback)使用。這使得代理成為一種非常強大的機制,用於實現事件處理、反饋(回調)和泛型方法的多態性。
參數數組:提供了一種更加靈活和便捷的方式來處理可變數量的輸入參數。定義參數數組時,數據類型前需使用 params修飾符,數據類型後放置一組空的方括弧,如:
void ListInts( params int[]inVals )
程式執行
C#所開發的程式原始碼並不是編譯成能夠直接在作業系統上執行的二進制本地代碼。與Java類似,它被編譯成為中間代碼,然後通過.NETFramework的虛擬機——被稱之為通用語言運行庫(CLR)——執行。所有的.Net程式語言都被編譯成這種被稱為MSIL(MicrosoftIntermediate Language )的中間代碼。因此雖然最終的程式在表面上仍然與傳統意義上的執行檔都具有“.exe”的後綴名。但是實際上,如果計算機上沒有安裝.Net Framework,那么這些程式將不能夠被執行。
在程式執行時,.Net Framework將中間代碼翻譯成為二進制機器碼,從而使它得到正確的運行。最終的二進制代碼被存儲在一個緩衝區中。所以一旦程式使用了相同的代碼,那么將會調用緩衝區中的版本。這樣如果一個.Net程式第二次被運行,那么這種翻譯不需要進行第二次,速度明顯加快。
版本介紹
- C# 1.0——純粹的面向對象
發布時間:2002 年 1 月
C# 1.0 的主要功能:類、結構、接口、事件、屬性、委託、運算符和表達式、語句、特性
- C# 1.2
發布時間:2003 年 4 月
隨 Visual Studio .NET 2003 一起提供的 C# 版本 1.2。它對語言做了一些小改進。
從此版本開始,當 IEnumerator 實現 IDisposable 時,foreach 循環中生成的代碼會在 IEnumerator 上調用 Dispose。
這一時期的C#(以下稱為C#1.x)提出了純粹的面向對象概念。C++並非純面向對象的,為了和C兼容以及提供更高的執行效率,它保留了很多模組化的東西。C#還通過類類型、值類型和接口類型的概念形成了統一的類型系統。
儘管C# 1.x提供了如此多的新鮮概念,但實際上,這些概念都是由CLI提出的。因此當將一個C#源程式編譯為執行檔時,編譯器做的工作相對而言並不多。需要編譯器代勞的是要將一個簡單的委託定義語句翻譯為一個繼承System.MulticastDelegate類型定義。
- C# 2.0——泛型編程新概念
發布時間:2005 年 11 月
C# 2.0的主要功能:泛型、分部類型、匿名方法、可以為 null 的值類型、疊代器、協變和逆變。
微軟在2004年的6月份發布了Visual Studio2005的第一個Beta 版,同時向開發者展示了C#語言的2.0版本。2005年4月,微軟發布了Visual Studio2005 Beta2,這已經是具備了幾乎全部功能的VisualStudio,包括的產品有SQL Server2005、TeamFoundation Server和TeamSuite。這時的C#編譯器已經能夠處理C#2.0中所有的新特性。
C# 2.0為開發者帶來的最主要的特性就是泛型編程能力。和面向對象思想一樣,泛型思想也是一種已經成熟的編程思想,但依然是沒有哪一種主流開發語言能夠支持完備的泛型概念。這主要是因為泛型的概念在一定程度上對面向對象概念進行衝擊,同時,由於在編譯期間對類型參數的完全檢測很難做到,很多問題會被遺留到運行時。C# 2.0別出心裁,對泛型類型參數提出了“約束”的新概念,並以優雅的語法體現在語言之中。有了約束,結合編譯器強大的類型推斷能力,可以在編譯時發現幾乎所有“危險”的泛型套用。
C# 2.0的另一個突出的特性就是匿名方法,用來取代一些短小的並且僅出現一次的委託,使得語言結構更加緊湊。匿名方法除了可以使得事件處理器的編寫更加精簡以外,還將開發者帶入了程式設計的一個新的領域——函式式編程,曾經有高人就用匿名方法結合泛型編程實現了函式式編程中的重要結構—— Lambda 表達式。儘管這種實現顯得很繁瑣而且不易理解,但畢竟是實現了。
- C#3.0——(研發代號“Orcas”)
發布時間:2007 年 11 月
C#3.0的主要功能:自動實現的屬性、匿名類型、查詢表達式、Lambda 表達式、表達式樹、擴展方法、隱式類型本地變數、分部方法、對象和集合初始值設定項
2005年9 月份的PDC大會——C#3.0(研發代號“Orcas”——魔鬼)的技術預覽版。說到C# 3.0,就不得不提一下微軟的LINQ 項目,LINQ(語言集成查詢,LanguageIntegrated Query)提出了一種通過面向對象語法來實現對非面向對象數據源的查詢技術,可查詢的數據源從關係型資料庫延伸到一般意義上的集合(如數組和列表)以及XML。而C# 3.0則是率先實現了LINQ的語言。
在C# 3.0中,可以用類似於SQL語句的語法從一個數據源中輕鬆地得到滿足一定條件的對象集合。例如要查找一個字元串數組names中所有長度大於5的字元串,就可以寫:var longname = from n in nameswheren.Length > 5 select n;
這樣就得到一個新的字元數組longname,其中包含了所需要的結果。這種語句稱作查詢語句,與SQL語句唯一的區別是C#中的查詢語句往往把select子句放到最後(這反而倒有些類似於中文的閱讀順序了)。初次看到這樣一個語句,可能會有很大疑問:這還是C#語言嗎?這的確是合乎語法規則的C#代碼,而且編譯器可以識別這種語法。然而實際上,C#編譯器並不會對這種語法進行實際的的編譯,而是將其翻譯為正常的方法調用。
C# 3.0 開始為 C# 轉變為面向對象/函式式混合語言奠定基礎。
- C# 4.0——動態編程
發布時間:2010 年 4 月
C# 4.0 新功能:動態綁定、命名參數/可選參數、泛型協變和逆變、嵌入的互操作類型
C# 4.0 新增 dynamic關鍵字,提供動態編程(dynamicprogramming),把既有的靜態物件標記為動態物件,類似javascript, Python 或 Ruby。
- C# 5.0
發布時間:2012 年 8 月
主要功能列表:異步成員、調用方信息特性、
- C# 6.0
發布時間:2015 年 7 月
主要功能:靜態導入、異常篩選器、自動屬性初始化表達式、Expression bodied 成員、Null 傳播器、字元串內插、nameof 運算符、索引初始化表達式、Catch/Finally塊中的 Await、僅限 getter 屬性的默認值
在此版本中,C# 開始消除語言樣本,讓代碼更簡潔且更具可讀性。
C# 7.0
發布時間:2017 年 3 月
新增功能:out 變數、元組和析構函式、模式匹配、本地函式、已擴展 expression bodied 成員、ref 局部變數、引用返回、棄元、二進制文本和數字分隔設定、引發表達式
重點是縮減了使用 out 關鍵字的變數聲明,並通過元組實現了多個返回值。
- C# 7.1
發布時間:2017 年 8 月
此版本增加了語言版本選擇配置元素、三個新的語言功能和新的編譯器行為。
- C# 7.2
發布時間:2017 年 11 月
C# 7.2 版添加了幾個小型語言功能:stackalloc 數組上的初始值設定項、對支持模式的任何類型使用 fixed 語句、無需固定即可訪問固定的欄位、重新分配 ref 本地變數、聲明 readonly struct 類型,以指示結構不可變且應作為 in 參數傳遞到其成員方法、在實參上添加 in 修飾符,以指定形參通過引用傳遞,但不通過調用方法修改、對方法返回項使用 ref readonly 修飾符,以指示方法通過引用返回其值,但不允許寫入該對象、聲明 ref struct 類型,以指示結構類型直接訪問託管的記憶體,且必須始終分配有堆疊、使用其他泛型約束、非尾隨命名參數、數值文本中的前導下劃線、private protected 訪問修飾符、條件 ref 表達式
- C# 7.3
發布時間:2018 年 5 月
C# 7.3 版本有兩個主要主題。 第一個主題提供使安全代碼的性能與不安全代碼的性能一樣好的功能。 第二個主題提供對現有功能的增量改進。 此外,此版本中還添加了新的編譯器選項。
新增功能支持使安全代碼獲得更好的性能的主題:無需固定即可訪問固定的欄位、可以重新分配 ref 本地變數、可以使用 stackalloc 數組上的初始值設定項、可以對支持模式的任何類型使用 fixed 語句、可以使用更多泛型約束。
對現有功能進行了以下增強:可以使用元組類型測試 == 和 !=、可以在多個位置使用表達式變數、可以將特性附加到自動實現的屬性的支持欄位、改進了通過 in 區分參數時進行的方法解析、重載解析的多義情況現在變得更少。
- C# 8.0
發布時間:2019 年 9 月
C# 8.0 版是專門面向 .NET C# Core 的第一個主要 C# 版本。 一些功能依賴於新的公共語言運行時 (CLR) 功能,而其他功能則依賴於僅在 .NET Core 中添加的庫類型。
新增功能和增強功能:Readonly 成員、默認接口方法、模式匹配增強功能、Using 聲明、靜態本地函式、可處置的 ref 結構、可為空引用類型、異步流、索引和範圍、Null 合併賦值、非託管構造類型、嵌套表達式中的 Stackalloc、內插逐字字元串的增強功能。
- C# 9
發布時間:2020 年 11 月
C# 9是面向 .NET5 版本的任何程式集的默認語言版本。
新增功能和增強功能:記錄、僅限 Init 的資源庫、頂級語句、關係模式和邏輯模式匹配增強、性能和互操作性、調整和完成功能。
- C# 10
發布時間:2021 年 11 月
C# 10 標誌著每年 .NET 發布節奏的更多轉變。
新增功能和增強功能:記錄結構、結構類型的改進、內插字元串處理程式、global using 指令、檔案範圍的命名空間聲明、擴展屬性模式、對 Lambda 表達式的改進、可使用 const 內插字元串、記錄類型可密封 ToString()、改進型明確賦值、在同一析構中可同時進行賦值和聲明、可在方法上使用 AsyncMethodBuilder 屬性、CallerArgumentExpression 屬性、增強的 #line pragma、本文後面的泛型屬性、接口中的靜態抽象成員。
- C# 11
發布時間:2022 年 11 月
C# 11 引入了泛型數學以及支持該目標的幾個功能。 可以為所有數字類型編寫一次數值算法。
新增功能:原始字元串字面量、泛型數學支持、泛型屬性、UTF-8 字元串字面量、字元串內插表達式中的換行符、列表模式、檔案本地類型、必需的成員、自動默認結構、常量 string 上的模式匹配 Span<char>、擴展的 nameof 範圍、數值 IntPtr、ref 欄位和 scoped ref等。
- C# 12
發布時間:2023 年 11 月
新增功能:主構造函式、集合表達式 、內聯數組、Lambda 表達式中的可選參數、ref readonly 參數 、創建任何類型的別名 、試驗性屬性 、攔截器 。
套用
C# 是一種通用、面向對象的程式語言,由 Microsoft 公司開發。它具有強大的類型安全性、可擴展性和豐富的庫支持,廣泛套用於多個領域和平台。以下是 C# 的一些主要套用領域:
桌面應用程式開發:C# 可用於開發Windows 桌面應用程式,包括圖形用戶界面(GUI)應用程式、圖像和視頻處理工具、辦公軟體等。通過使用 C# 和Windows Presentation Foundation (WPF) 或Windows Forms,開發人員可以創建功能豐富、易於使用的桌面應用程式。
Web 應用程式開發:C# 可以用於構建Web 應用程式和服務。ASP.NET 是一個流行的 Web 開發框架,它使用 C# 作為主要程式語言。開發人員可以使用 ASP.NET MVC 或 ASP.NET Core 構建動態的、可擴展的 Web 應用程式,並利用強大的功能,如數據訪問、身份驗證和授權。
移動應用程式開發:C# 可以用於開發跨平台的移動應用程式。使用 Xamarin,開發人員可以使用 C# 和共享代碼庫構建Android 和 iOS 應用程式。這使得開發人員能夠在多個平台上共享代碼,並快速開發高性能的移動應用程式。
遊戲開發:C# 在遊戲開發領域廣泛套用。Unity 引擎是一種流行的遊戲開發平台,支持使用 C# 進行遊戲開發。開發人員可以編寫遊戲邏輯、創建遊戲對象和處理用戶輸入等,通過 Unity 引擎將其轉化為跨平台的遊戲。
雲和服務開發:C# 可以用於構建雲應用程式和服務。使用 .NET Core 和 ASP.NET Core,開發人員可以構建具有高度可伸縮性和可靠性的雲服務,如微服務、Web API 和後端服務。C# 還提供了強大的庫和工具,用於與雲平台(如 Azure)進行集成和開發。
除了以上套用領域,C# 還可以用於資料庫開發、科學計算、物聯網(IoT)應用程式、人工智慧(AI)應用程式等。它具有廣泛的生態系統和豐富的第三方庫支持,為開發人員提供了豐富的工具和資源來構建各種類型的應用程式。
發展前景
C#作為.NET生態系統的核心程式語言,已經融合了眾多現代軟體開發的先進理念和實踐:它是一種面向對象的語言,提供了類型安全、強類型檢查、垃圾回收等特性,以確保記憶體管理的自動化和代碼的健壯性。C#還支持組件技術,允許開發者構建和重用軟體組件,同時其跨平台能力通過.NET Core和.NET 5/6/7等版本得到了顯著增強。
Java依然在企業級套用和服務端開發中占有一席之地,特別是在需要跨平台運行和有大量現有代碼庫的場合。然而,C#通過.NET的跨平台支持,已經在多個作業系統上證明了自己的能力,包括Windows、Linux和macOS。隨著技術的不斷進步和市場需求的變化,C#和.NET生態系統將持續演進,以滿足開發者和企業的需求。