首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 跨腳本/類別呼叫方法完整指南:命名空間、實例化、靜態、委派四大模式

     編輯:程式設計綜合問答

場景:專案 A 呼叫專案 B 的公用方法

假設:

  • 專案 Library1(Class Library),命名空間 Library1,類別 Class1,方法 public void DoWork()。
  • 專案 WindowsFormApp1(WinForms),命名空間 WindowsFormApp1,需呼叫 DoWork。

模式一:命名空間引用 + 實例化(最常用)

// WindowsFormApp1 專案 → 參考 → 加入參考 → 專案 → 勾選 Library1
using Library1; // 頂部引入命名空間

public void OnButtonClick() {
    var helper = new Class1(); // 實例化
    helper.DoWork();           // 呼叫實例方法
}

模式二:靜態方法直接呼叫

// Library1.Class1
public static void DoStaticWork() { ... }

// WindowsFormApp1
using Library1;
public void OnButtonClick() {
    Class1.DoStaticWork(); // 類別名.方法名,無需實例化
}

模式三:介面解耦 + 依賴注入(專業架構)

// Library1
public interface IWorker { void DoWork(); }
public class Class1 : IWorker { public void DoWork() { ... } }

// WindowsFormApp1 (使用 Microsoft.Extensions.DependencyInjection)
services.AddTransient();

// Controller/Form 建構子注入
private readonly IWorker _worker;
public Form1(IWorker worker) { _worker = worker; }
public void OnButtonClick() { _worker.DoWork(); }

模式四:委派/回調(事件驅動、插件架構)

// Library1
public class Class1 {
    public event Action OnProgress;
    public void DoWork() {
        for (int i=0;i<100;i++) OnProgress?.Invoke($"進度 {i}%");
    }
}

// WindowsFormApp1
var helper = new Class1();
helper.OnProgress += msg => this.Invoke(() => lblStatus.Text = msg);
helper.DoWork();

選擇指南

需求推薦模式
簡單工具類、無狀態模式二 靜態方法
有狀態、需多實例、可測試模式一 實例化
多實作切換、單元測試 Mock、解耦模式三 介面+DI
非同步進度回報、事件通知、插件擴展模式四 委派/事件

常見錯誤與修正

  • 忘記加專案參考:右鍵專案 → 加入參考 → 專案 → 勾選目標 DLL。
  • 命名空間拼錯:查看目標類別檔案頂部 namespace xxx,完全複製。
  • 存取修飾符不足:確保類別與方法均為 public(或 internal 同組件)。
  • 跨執行緒存取 UI:在委派回調中用 Control.Invoke 或 Dispatcher.Invoke 切回 UI 執行緒。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved