2013-03-25 63 views
2

正如標題所詢問的,當您導入一個DLL(如User32.dll)並聲明方法來調用該DLL上的方法時,爲什麼需要將這些方法聲明爲Static和Extern。導入DLL時爲什麼要聲明靜態方法和Extern方法?

I.E,這是從另一個StackOverflow的答案,但演示我問。

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, UIntPtr dwExtraInfo); 
+0

'static':因爲否則你必須以某種方式與另一方匹配實例。並處理'this'參數。 'extern',因爲你正在進口。 – 2013-03-25 15:05:25

回答

3

static - 因爲他們不需要類的實例,這些方法的ARE調用系統API,無需任何初始化,可以在靜態/非靜態塊

extern使用 - 的extern修飾符用於聲明外部實現的方法。由於API方法沒有在類文件本身中聲明,所以extern告訴編譯器該方法聲明瞭else-where。

1

雖然我真的不知道有沒有技術細節,這一點,我想說的原因是:

駐留在外部DLL

靜態
方法不能被綁定到任何對象實例。如果它們綁定到一個對象實例,則DLL必須每次都跟蹤哪個實例正在調用該方法。

的extern
我想這僅僅是告訴編譯器用於綁定的DLL,而不是期待在C#中實現的方法中插入代碼的關鍵字。

相關問題