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

C# 資料類型完整指南:值類型、參考類型、裝箱拆箱與轉換規則

     編輯:關於C語言

C# 型別系統概觀

C# 的型別系統分為兩大類別:值類型 與 參考類型。理解兩者在記憶體配置、複製行為與效能上的差異,是撰寫高效、正確程式碼的基礎。

值類型

值類型變數直接包含資料,儲存在 堆疊 上,具有固定長度。每個變數擁有獨立的資料副本,操作互不干擾。

基本型別

分類關鍵字.NET 對應型別大小範例
整數sbyteSystem.SByte8 位sbyte v = -12;
byteSystem.Byte8 位byte v = 255;
shortSystem.Int1616 位short v = 32000;
ushortSystem.UInt1616 位ushort v = 65000;
intSystem.Int3232 位int v = 123;
uintSystem.UInt3232 位uint v = 456U;
longSystem.Int6464 位long v = 789L;
ulongSystem.UInt6464 位ulong v = 100UL;
charSystem.Char16 位char c = 'A';
浮點數floatSystem.Single32 位float f = 1.23F;
doubleSystem.Double64 位double d = 4.56;
高精度decimalSystem.Decimal128 位decimal m = 1.23M;
布林boolSystem.Boolean1 位bool b = true;

結構型別

使用 struct 定義,同樣屬於值類型,儲存在堆疊。適合輕量、不可變的資料結構。

public struct Point
{
    public int X;
    public int Y;
    public string Label;
}

結構 vs 類別:結構為值類型(堆疊),類別為參考類型(堆積)。結構不支援繼承,但可實作介面。

列舉型別

使用 enum 定義具名常數集合,預設底層型別為 int。

enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat }
enum Status { Low = 1, Medium = 5, High = 10 }

參考類型

參考類型變數儲存記憶體位址,實際物件配置在 受控堆積 上。多個變數可參考同一物件,修改會互相影響。

  • 類別:class
  • 介面:interface
  • 陣列:所有陣列均為參考類型
  • 委派:delegate
  • 字串:string(不可變參考類型)

字串操作範例

string s = "Hello";
char c = s[1]; // 'e'
bool equal = (s == "Hello"); // 內容比較
int cmp = string.Compare(s, "World"); // -1/0/1

格式化輸出

int i = 123;
double d = 123.456;
Console.WriteLine(i.ToString("D8"));       // 00000123
Console.WriteLine(d.ToString("F2"));       // 123.46
Console.WriteLine(d.ToString("N"));        // 123.46 (含千分位)
Console.WriteLine((0.126).ToString("P"));  // 12.60%
Console.WriteLine(string.Format("i:{0,-7}, j:{1,7}", i, d));

陣列類型

一維陣列

string[] arr1 = { "C", "C++" };
int[] arr2 = new int[4] { 0, 1, 2, 3 };
int[] arr3 = { 5, 6, 7 };

多維陣列

int[,] matrix = { {0,1}, {2,3}, {4,5} };
int[,] m2 = new int[5, 3];

鋸齒陣列

string[][] jagged = new string[3][];
jagged[0] = new string[2] { "a", "b" };
jagged[1] = new string[3] { "c", "d", "e" };

型別轉換規則

  • 隱含轉換:小範圍 → 大範圍(如 int → long),無資料遺失風險
  • 顯式轉換:大範圍 → 小範圍(如 long → int),需加括號 (int)val,可能截斷資料
  • 使用者定義轉換:透過 implicit/explicit 運算子多載

裝箱與拆箱

將值類型轉為 object(參考類型)稱為 裝箱;反之為 拆箱。

int i = 123;
object boxed = i;        // 裝箱:配置堆積記憶體、複製數值
int j = (int)boxed;      // 拆箱:檢查型別、複製回堆疊

效能提醒:頻繁裝箱/拆箱會增加 GC 壓力,建議使用泛型集合(List<T>)避免。

可為 Null 的值類型

C# 2.0 引入 Nullable<T>(簡寫 T?),允許值類型表達「無值」狀態。

int? count = null;
if (count.HasValue) Console.WriteLine(count.Value);
Console.WriteLine(count ?? 0); // null 聯合運算子
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved