JavaScript 和 TypeScript 開發人員學習 C# 的藍圖
C#、TypeScript 和 JavaScript 都是 C 語言家族的成員。 語言之間的相似性,可協助您用 C# 快速發揮生產力。
- 類似的語法:JavaScript、TypeScript 和 C# 都屬於 C 語言家族。 這種相似性表示您已經可以閱讀並了解 C#。 雖然有些差異,但大部分的語法與 JavaScript 和 C 相同。大括弧和分號是熟悉的東西。
if
、else
、switch
等控制項狀態相同。for
、while
和do
...while
的迴圈陳述式相同。 C# 和 TypeScript 之class
和interface
的關鍵字相同。 從public
到private
之 TypeScript 和 C# 的存取修飾詞相同。 -
=>
權杖:所有語言都支援輕量型函式定義。 在 C#,它們稱為 Lambda 運算式,在 JavaScript,它們通常稱為 箭號函式。 - 函式階層:這三種語言都支援區域函式,亦即其他函式定義的函式。
- 非同步/Await:這三種語言針對非同步程式設計共用相同的
async
和await
關鍵字。 - 記憶體回收:這三種語言的自動記憶體管理都採用記憶體回收。
- 事件模型:C# 的
event
語法,與 JavaScript 的文件物件模型 (DOM) 事件模型相似。 - 套件管理員:NuGet 是 C# 和 .NET 最常見的套件管理員,與 JavaScript 應用程式的 npm 相似。 C# 程式庫以組件的方式傳遞。
繼續學習 C# 時,您會認識不屬於 JavaScript 的概念。 如果您使用 TypeScript,可能對以下部分概念很熟悉:
- C# 型別系統:C# 是強型別語言。 每個變數都有一個型別,而且該型別無法變更。 您可以定義
class
或struct
型別。 您可以定義interface
定義,由它定義其他型別實作的行為。 TypeScript 包含其中許多概念,但由於 TypeScript 是以 JavaScript 為基礎所建置,因此型別系統不那麼嚴格。 - 模式比對:模式比對可根據複雜資料結構的形狀來實現簡潔的條件陳述式和運算式。
is
運算式會檢查變數是否「是」某種模式。 以模式為基礎的switch
運算式可提供豐富的語法來檢查變數,並根據其特性來做出決定。 - 字串插值和原始字串常值:字串插值可讓您在字串中插入評估的運算式,而不是使用位置識別碼。 原始字串常值可提供一種將文字中的逸出序列降到最低的方式。
- 可為 Null 和不可為 Null 的型別:C# 會透過將
?
後綴附加到型別來支援可為 Null 的實值型別和可為 Null 的參考型別。 對於可為 Null 的型別,如果您在取消參考運算式之前不檢查null
,則編譯器會警告您。 對於不可為 Null 的型別,如果您可能會對該變數指派null
值,則編譯器會警告您。 這些功能可儘量減少應用程式擲回 System.NullReferenceException。 由於在 TypeScript 針對選擇性屬性使用?
,因此語法可能很熟悉。 - LINQ:Language Integrated Query (LINQ) 可提供一般語法來查詢和轉換資料,無論其儲存方式如何。
深入了解時,其他差異會變得明顯,但許多差異範圍較小。
C# 無法使用 JavaScript 和 TypeScript 的部分熟悉功能和慣用語:
- 動態型別:C# 使用靜態型別。 變數宣告包含型別,而且該型別無法變更。 C# 中有
dynamic
型別,可提供執行階段繫結。 - 原型繼承:C# 繼承屬於型別宣告。 C#
class
宣告可指定任何基底類別。 在 JavaScript,您可以設定__proto__
屬性,在任何執行個體設定基底類型。 - 解譯的語言:C# 程序碼必須先編譯才能執行。 JavaScript 程式碼可以在瀏覽器直接執行。
此外,還有幾個 C# 沒有的 TypeScript 功能:
- 等位型別:C# 不支援等位型別。 不過,設計提案正進行中。
- 裝飾項目:C# 沒有裝飾項目。 一些常見的裝飾項目,例如
@sealed
,是 C# 的保留關鍵字。 其他常見的裝飾項目可能有對應的屬性。 針對其他裝飾項目,您可以建立自己的屬性。 - 較寬容的語法:C# 編譯器剖析程式碼的方式,比 JavaScript 需要的剖析更嚴格。
如果您要建置 Web 應用程式,應該考慮使用 Blazor 建置應用程式。 Blazor 是針對 .NET 和 C# 建置的完整堆疊 Web 架構。 Blazor 元件可以用 .NET 組件的方式在伺服器執行,或是使用 WebAssembly 在用戶端執行。 Blazor 支援與您常用的 JavaScript 或 TypeScript 程式庫互通。