首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> C# 入門

C++ 轉 C# 進階必讀(一):受控環境、值/參考型別與結構

     編輯:C# 入門

從非受控到受控的思維轉換

C++ 追求底層控制(記憶體位置、物件生命週期);C# 採用受控環境:

  • 物件配置位置由型別決定:實值型別(int、struct)在堆疊,參考型別(class)在堆積。
  • 無法指定記憶體位址、無解構函式(destructor),改由垃圾回收器(GC)非決定性回收。
  • 無多重繼承、無模板(早期版本),改用介面與泛型(C# 2.0+)達成同樣目標。
  • 基本型別對應 CLR 類型(int = System.Int32),確保跨語言互操作一致性。

常見陷阱:值型別 vs 參考型別

  • 值型別:int、struct、enum。傳遞參數時複製「值」,儲存於堆疊(除非被裝箱)。
  • 參考型別:class、delegate、array。變數儲存堆積物件的參考(位址),傳遞參數時複製「參考」。
struct Point { public int X, Y; }
class Wrapper { public Point P; }

Point p1 = new Point(1,2);
Point p2 = p1;        // 複製值,p2 獨立於 p1
p2.X = 99;            // p1.X 仍為 1

Wrapper w1 = new Wrapper { P = new Point(1,2) };
Wrapper w2 = w1;      // 複製參考,指向同一物件
w2.P.X = 99;          // w1.P.X 也變成 99

結構與類別的關鍵差異

特性結構類別
型別分類值型別參考型別
繼承不可繼承(隱性密封),基類固定為 System.ValueType支援單一繼承
預設建構函式不可自訂無參數建構函式可自訂
Null 值預設不可為 null(可用 Nullable<T>)可為 null
效能小型物件配置/複製較快,無 GC 壓力適合大型、具身分識別的物件

結構適合輕量資料容器(如 Point、DateTime);類別適合複雜行為與狀態管理。

萬物皆物件

所有型別(含 int、struct)隱性繼承 System.Object,擁有 ToString()、GetHashCode()、Equals() 等方法。Console.WriteLine 會自動呼叫 ToString(),值型別會自動裝箱為 Object 實例。

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