首頁 >web前端 >js教程 >從 JS 角度初看 C#

從 JS 角度初看 C#

Barbara Streisand
Barbara Streisand原創
2024-12-05 01:58:13949瀏覽

First glance at C# from JS perspective

我的旅程開始於…

當我開始創建一個專案時,我的目標是建立一款可能具有 3D 元素、具有互動性、特別是在行動平台上玩的遊戲。我還想將人工智慧整合到遊戲中以增加深度和複雜性。自然地,這促使我探索 C#——Unity 遊戲引擎中常用的語言。雖然我不會在這篇文章中深入探討 Unity 本身的細節,但我確實想重點討論一下我選擇 C# 的原因,以及從我作為一個具有 JavaScript 背景的人的角度來看它與 JavaScript 的比較。

為什麼是 C#...

我決定使用 C# 的主要原因是我選擇的遊戲引擎 Unity 嚴重依賴 C# 作為其主要程式語言。儘管您也可以在 Unity 中使用其他語言,但 C# 是迄今為止最廣泛支援和推薦的語言。它是一種由Microsoft 開發的現代物件導向程式設計語言,通常用於各種應用程序,包括桌面軟體、Web 應用程式(透過ASP.NET),以及—當然是使用Unity 的遊戲。
C# 是更大的 .NET 生態系統的一部分,該生態系統提供了龐大的資源和框架庫,用於建立從小型實用程式到大型企業應用程式的所有內容。語言本身的設計考慮到了簡單、強大和類型安全。這使其成為多種項目的多功能選擇。但在這篇文章中,我想特別關注類型安全方面以及為什麼它使 C# 脫穎而出,尤其是與 JavaScript 相比。

為什麼 C# 資料型別...

C# 是一種靜態類型語言,這意味著變數類型(如 int、bool、string)是在編譯時定義的。由於 C# 是靜態類型的,因此編譯器可以提前執行更多最佳化工作。它的類型安全功能,透過嚴格定義變數類型,允許編譯器在程式碼運行之前捕獲多種類型的錯誤,並幫助程式碼更易於維護。 JavaScript,動態類型,由於稱為類型強制的過程,需要更多的運行時檢查,這會增加開銷,特別是在大型或複雜的應用程式中。這是 C# 更快的部分原因。然而,C# 的主要效能優勢在於計算密集型多執行緒任務(例如並行運行遊戲的不同部分)。

JS 類型強制:
let num = 5;
let str = "10";
console.log(num + str);  // Outputs "510" (string concatenation instead of numeric addition)
str = 10; // Assign a string to a variable and later assign a number to the same variable
常見的 C# 值資料類型聲明:
int x = 10; // Whole integer number
double pi = 3.14159; // Decimals 64-bit floating point, end with d but not necessary
float y  = 10.2f; // Decimals 32-bit floating point, have to end with f
decimal price = 19.99m; // 128-bit decimal, have to end with m, for precise monetary calculations or any financial stuff
bool isValid = true; //Boolean true or false
char grade = 'A'; //A single character, of 16-bit Unicode character
string name = "John"; //special case, is actually a reference type

眾所周知,在 JavaScript 中,變數是透過 var、const 和 let 來宣告的。另外,JavaScript 沒有 int 和 float 的差別;這只是數字。因此,C# 沒有 NaN。另外,在 JavaScript 中,string 是原始型別(類似 C# 中的值型別),但在 C# 中,它是參考型別。

在 C# 中,值類型預設不能為 null,但您可以使用可空型別來允許將值型別指定為 null。僅允許引用類型(如字串、物件和自訂類別)使用 null。預設情況下,引用類型初始化為 null。要使值型別可為空,可以使用 ?語法(如 int?、double?、bool?)。

string name = null; // This is valid.
Person person = null; // This is also valid if 'Person' is a class.
int? number = null; // Explicitly allows null since nullable type is enabled
int number = null; // Error: Cannot assign null to a non-nullable value type

JavaScript 不像 C# 那樣有可空類型的概念;從技術上講,一切都可以為空或未定義。

在兩種語言中,在處理引用類型時,透過一個引用對資料所做的任何更改都會影響指向記憶體中相同資料的所有其他引用。然而,C# 更強類型,並且數組具有固定大小,除非您使用像 List 這樣的集合,而 JavaScript 數組更加靈活和動態。
C# 引用型別:物件、類別、委託、陣列。
JavaScript 引用型別:物件、陣​​列、函數。

C# 陣列(固定大小):
int[] numbers = new int[] { 1, 2, 3 };
numbers[3] = 4;  // Error: Index out of bounds because the array size is fixed
JS 陣列(動態大小):
let numbers = [1, 2, 3];
numbers.push(4);  // Adds 4 to the end of the array, dynamically resizing it
console.log(numbers);  // [1, 2, 3, 4]

C# 資料轉換...

在C#中,資料轉換是指將一種資料型別轉換為另一種資料型別的過程,主要有兩種方式完成:隱式顯式 轉換。

  • 隱式轉換從較小型別轉換為較大型別時,或當資料遺失風險時,會自動進行。
  • 明確轉換在存在資料遺失風險時手動完成(通常透過強制轉換)。

C# 還提供了用於安全類型轉換的內建方法,特別是在可能不會自動轉換的類型之間進行轉換時。此外,可空類型需要額外的處理來處理空值。在 C# 中處理不同資料類型時,正確的資料轉換對於確保資料完整性、避免執行時間錯誤和保持效能至關重要。

總而言之,雖然 JavaScript 的靈活性和動態特性使其非常適合快速原型設計和 Web 開發,但 C# 在處理更複雜或計算密集型任務時具有明顯的效能優勢。在遊戲開發中尤其如此,您可能需要處理 3D 圖形、AI、實體模擬和其他高效能操作。
記得加入分號 (;) 來結束 C# 中的每一行程式碼!我總是忘記,但它們在 C# 中是嚴格要求的。
以下是有關保留關鍵字的官方文件的快速鏈接,保留關鍵字是該語言使用的單詞,因此它們已經具有不應重寫的特定定義

接下來:分解和理解 C# 錯誤的指南(即將推出......)

以上是從 JS 角度初看 C#的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn