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

C# 方法進階:多載、委派策略與平台呼叫 (P/Invoke)

     編輯:關於C語言

方法多載

同名、不同參數清單 (型別/個數/順序):


static int Add(int a, int b) => a + b;
static string Add(string a, string b) => a + b;

Add(111, 222);    // 333
Add("111", "222"); // "111222"

委派即「函式型別」

將方法作為值傳遞、儲存、組合:


delegate double BinaryOp(double x, double y);

static double Add(double a, double b) => a + b;
static double Sub(double a, double b) => a - b;
static double Mul(double a, double b) => a * b;
static double Div(double a, double b) => a / b;

static void Main()
{
    BinaryOp op = Add;   // 方法群組轉換
    Console.WriteLine(op(3, 2)); // 5
    op = Sub; Console.WriteLine(op(3, 2)); // 1
    op = Mul; Console.WriteLine(op(3, 2)); // 6
    op = Div; Console.WriteLine(op(3, 2)); // 1.5
}

平台呼叫 (P/Invoke)

呼叫非受控 DLL (如 Win32 API):


using System.Runtime.InteropServices;

class Native
{
    [DllImport("User32.dll")]
    public static extern int MessageBox(int hWnd, string text, string caption, int type);
}

static void Main()
{
    Native.MessageBox(0, "Visual Studio 2008!", "資訊", 0);
}

P/Invoke 關鍵點

  • `DllImport` 指定 DLL 名稱 (不含路徑,依賴系統搜尋順序)
  • `extern` + `static` 宣告
  • 型別對應:`int`↔`INT`、`string`↔`LPCTSTR` (需 `CharSet`)、`IntPtr`↔`HANDLE`
  • 呼叫慣例:`CallingConvention.StdCall` (Win32 預設)
  • 記憶體管理:誰配置誰釋放,注意 `out`/`ref` 與緩衝區大小
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved