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

Effective C#:減少裝箱與拆箱 (3) - 介面技巧與值型別修正

     編輯:關於C語言

問題:值型別在集合中無法直接修改

將值型別放入 ArrayList 時,會發生裝箱。嘗試修改屬性:

((Person)arrPersons[0]).Name = "NewName"; // 編譯錯誤

因為轉型產生的是臨時拷貝,修改不影響原物件。

解決方案:透過介面存取

public interface IPersonName { string Name { get; set; } }
public struct Person : IPersonName { /* 實作 */ }

// 使用介面修改 - 成功
((IPersonName)arrPersons[0]).Name = "NewName";

原理差異

  • 直接轉型:產生值型別臨時變數(拷貝),修改無效
  • 介面轉型:產生介面參考(引用型別),指向原物件,修改生效

關鍵在於產生臨時變數的型別不同:介面屬引用型別,相當於原物件的引用。

效能與正確性雙贏

  • 減少裝箱/拆箱操作
  • 保證修改正確性

注意事項

介面存取的成員若為值型別,則仍會發生裝箱/拆箱,無法減少開銷。

總結

頻繁裝箱/拆箱降低程式效能,編寫程式碼時應盡量避免。善用介面技巧可同時解決正確性與效能問題。

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