C#、TypeScript 和 JavaScript 都是 C 系列語言的成員。 語言之間的相似性可協助您快速在 C# 中提高生產力。
-
類似的語法:JavaScript、TypeScript 和 C# 是 C 系列語言。 這種相似性表示您已經可以閱讀並了解 C#。 有一些差異,但大部分的語法與 JavaScript 和 C 相同。大括弧和分號很熟悉。
if
、else
、switch
等控制陳述式是相同的。for
、while
和do
...while
的迴圈陳述式相同。class
和interface
的相同關鍵字同時存在於 C# 和 TypeScript 中。 TypeScript 和 C# 中的存取修飾詞,從public
到private
,都是相同的。 -
令牌
=>
:所有語言都支援輕量型函式定義。 在 C# 中,它們稱為 Lambda 運算式,在 JavaScript 中,通常稱為 箭頭函式。 - 函式階層:這三種語言都支援 本機函式,這些函式是在其他函式中定義的函式。
-
Async / Await:這三種語言共用相同的
async
和await
關鍵詞進行異步程序設計。 - 垃圾回收:所有這三種語言都依賴垃圾回收器來進行自動記憶體管理。
-
事件模型:C# 的
event
語法類似於文件物件模型 (DOM) 事件的 JavaScript 模型。 - 套件管理員: 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
值,則編譯器會警告您。 這些功能可以將您的應用程式發出System.NullReferenceException的情況降到最低。 TypeScript 使用?
表示選擇性屬性的語法可能會讓你感到很熟悉。 - LINQ:Language Integrated Query (LINQ) 可提供一般語法來查詢和轉換資料,無論其儲存方式如何。
隨著您瞭解得越多,其他差異會變得明顯,但其中許多差異的範圍較小。
C# 中無法使用 JavaScript 和 TypeScript 的一些熟悉功能和慣用語:
-
動態類型:C# 使用靜態類型。 變數宣告包含類型,且該類型無法變更。 C# 中有一種
dynamic
類型可提供運行時間系結。 -
原型繼承:C# 繼承是類型宣告的一部分。 C#
class
宣告會指出任何基類。 在 JavaScript 中,您可以設定__proto__
屬性,以在任何實例上設定基底類型。 - 解譯的語言:在您執行 C# 程式代碼之前,必須先編譯 C# 程式代碼。 JavaScript 程式代碼可以直接在瀏覽器中執行。
此外,C# 中沒有更多 TypeScript 功能:
- 等位類型:C# 不支援等位類型。 不過,設計提案正在進行中。
-
裝飾專案:C# 沒有裝飾專案。 一些常見的裝飾專案,例如
@sealed
C# 中的保留關鍵詞。 其他常見的裝飾器可能會有對應的 屬性。 對於其他裝飾器,您可以建立自己的屬性。 - 更寬容的語法:C# 編譯程式比 JavaScript 更嚴格地剖析程序代碼。
如果您要建置 Web 應用程式,您應該考慮使用 Blazor 來建置應用程式。 Blazor 是針對 .NET 和 C# 建置的完整堆疊 Web 架構。 Blazor 元件可以在伺服器上執行、做為 .NET 元件,或使用 WebAssembly 在用戶端上執行。 Blazor 支援與您喜愛的 JavaScript 或 TypeScript 函式庫進行互操作。