首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 入門教程(四):預定義類型與基本數據類型完整指南

     編輯:關於C語言

前言:C# 的類型系統基石

C# 作為強類型語言,擁有豐富的預定義類型,直接對應 .NET 運行時類型系統。不同於 C/C++ 的基本類型大小隨實現變化,C# 預定義類型具有固定大小、固定範圍、固定行為,跨平台一致。本文系統整理所有預定義類型、字面量語法、類型轉換規則、以及 bool 與整數的嚴格區分(避免經典 C/C++ Bug)。

核心預定義類型表

類型.NET 類型說明範圍/精度字面量後綴
objectSystem.Object所有類型終極基類——
stringSystem.StringUnicode 字符序列(不可變)—"text", @"verbatim"
sbyteSystem.SByte8 位有符號整數-128 ~ 127—
shortSystem.Int1616 位有符號整數-32,768 ~ 32,767—
intSystem.Int3232 位有符號整數-2,147,483,648 ~ 2,147,483,647—
longSystem.Int6464 位有符號整數-9.22e18 ~ 9.22e18L/l
byteSystem.Byte8 位無符號整數0 ~ 255—
ushortSystem.UInt1616 位無符號整數0 ~ 65,535—
uintSystem.UInt3232 位無符號整數0 ~ 4,294,967,295U/u
ulongSystem.UInt6464 位無符號整數0 ~ 1.84e19UL/ul/LU/lu
floatSystem.Single單精度浮點數±1.5e-45 ~ ±3.4e38, 7 位精度F/f
doubleSystem.Double雙精度浮點數±5.0e-324 ~ ±1.7e308, 15-16 位精度D/d (預設)
boolSystem.Boolean布林邏輯值true / false—
charSystem.Char單一 Unicode 字符 (UTF-16)U+0000 ~ U+FFFF'c'
decimalSystem.Decimal高精度十進制浮點數±1.0e-28 ~ ±7.9e28, 28-29 位有效數字M/m

關鍵差異:bool 非整數,杜絕 C/C++ 經典 Bug

C/C++ 中 int i = 0; if (i = 0) ... 編譯通過但邏輯錯誤(賦值而非比較)。C# 嚴格禁止整數隱式轉換為 bool:

int i = 0;
if (i = 0) { } // 編譯錯誤 CS0029: Cannot implicitly convert type 'int' to 'bool'

正確寫法:

if (i == 0) { }           // 比較
if ((str = Console.ReadLine()) == "") { } // 賦值後比較

設計哲學:條件判斷必須是明確的布林表達式,消除賦值/比較混淆、非零即真等隱性規則。

字面量與類型推導細節

  • 整數字面量無後綴 → int、uint、long、ulong(首個能容納者)。
  • 十六進制(0x...)無後綴 → int、uint、long、ulong。
  • 浮點字面量無後綴 → double。1.23F → float,1.23D/1.23 → double,1.23M → decimal。
  • char 字面量:'a', '\n', '\u0041'。
  • string 字面量:"line\nbreak" (轉義)、@"C:\path\file" (逐字字串,雙引號用 "" 轉義)。

值類型 vs 參考類型:預定義類型的分類

  • 值類型(繼承 System.ValueType):所有數值類型、bool、char、decimal、結構體、枚舉。存儲於棧/內聯,賦值複製內容。
  • 參考類型:object、string、類別、介面、委托、陣列。存儲於堆,變量存引用。

decimal 雖為值類型,但非基元類型(CLR 無專用指令),運算由 BCL 方法實現。

結構體模擬基本類型:運算子重載演示

C# 允許結構體重載運算子,實現類基本類型語義:

using System;
struct Digit { /* 內部 int 值 + 運算子重載 */ }
class Test {
  static void TestInt() {
    int a = 1, b = 2, c = a + b; Console.WriteLine(c); // 3
  }
  static void TestDigit() {
    Digit a = (Digit)1, b = (Digit)2, c = a + b; Console.WriteLine(c); // 3
  }
  static void Main() { TestInt(); TestDigit(); }
}

這展示了 C# 類型系統的可擴展性:使用者定義類型可擁有與基本類型一致的語法體驗。

常見陷阱與最佳實踐

  1. 整數除法截斷:int a = 5 / 2; // 2。需浮點運算請用 5.0 / 2 或轉型。
  2. 浮點比較:避免 a == b,用 Math.Abs(a-b) < epsilon。
  3. decimal 用於財務/精確計算:float/double 為二進制浮點,0.1 無法精確表示;decimal 為十進制浮點,適合貨幣。
  4. 溢出檢查:預設編譯器不檢查溢出(int.MaxValue + 1 → int.MinValue)。用 checked 區塊/編譯選項啟用檢查拋 OverflowException。
  5. 類型轉換:隱式轉換安全無損失(int → long);顯式轉換可能截斷/溢出((int)longVal),需謹慎。

總結

C# 預定義類型是類型系統的基石,固定大小、嚴格語義、豐富字面量支援。理解 bool 非整數、值/參考類型分工、decimal 精度優勢、溢出檢查機制,能避免 90% 初學者類型相關 Bug。下一篇將講解運算式、運算子與流程控制語句。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved