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

Effective C#:值型別與引用型別 (1) - 記憶體模型與參數傳遞陷阱

     編輯:關於C語言

兩大資料型別分類

特性值型別引用型別
範例int、float、bool、struct (DateTime)string、array、class 定義的型別
記憶體配置堆疊堆積
存取效率高(無位址轉換)低(需位址轉換)
記憶體回收用畢立即回收等待 GC 回收
指派操作複製,建立新物件複製參考,不建立新物件
參數/傳回值物件複製原物件參考
型別擴充性難擴充易擴充

函式參數傳遞常見錯誤

值型別:想修改原值需加 ref/out

// 錯誤:無法修改呼叫端變數
public void Increment(int i) { i++; }

// 正確:使用 ref 關鍵字
public void Increment(ref int i) { i++; }

值型別預設為值傳遞(複製),需明確標記 ref 或 out 才能修改原變數。

引用型別:不想被修改卻會被修改

public void AddValue(MyType typValue)
{
    typValue.Count = typValue.Count + 15; // 修改了原物件!
}

引用型別傳遞的是參考,函式內修改屬性會影響原物件。若不想修改原物件,需手動建立副本或設計為不可變型別。

編碼時務必區分兩者

理解值/引用型別在記憶體配置、指派語意、參數傳遞上的根本差異,能避免細微但關鍵的邏輯錯誤。

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