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

Effective C# 原則 43:請勿濫用反射 (下)

     編輯:關於C語言

反射的三大用途與風險

  1. 建立實例:依賴預設建構函式,移除建構函式編譯不報錯,執行期才失敗。工廠函式編譯期即可檢查。
  2. 呼叫成員方法:需字串比對方法名、檢查參數清單,程式碼冗長脆弱。介面導向編程可編譯期檢查型別。
  3. 存取資料成員:同樣需字串比對欄位名。資料繫結利用反射查找屬性,動態性超過開銷,屬合理用途。

替代方案:介面 + 工廠 + 委派


// 介面定義契約
public interface IMyInterface
{
    string Msg { get; set; }
    void DoWork();
}

// 類別實作並以屬性標記工廠方法
public class MyType : IMyInterface
{
    [FactoryFunction]
    public static IMyInterface CreateInstance() => new MyType();
    // 介面實作...
}

優點:回傳型別為強型別介面、編譯期檢查、支援繼承、無轉型失敗風險。

何時適合反射

  • 資料繫結:需繫結任意公用屬性,介面限制過大。
  • 選單命令:允許靜態/實例方法,介面僅能表達實例方法。
  • FxCop、NUnit:分析任意程式碼結構,介面無法表達。

結語

能以介面表達預期調用時,應優先使用介面、工廠、委派,產出更清晰、可維護系統。反射是晚期繫結強大工具,框架內部使用,一般情況宜避免濫用。

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