C# 中的 extern 關鍵字
在今天的文章中,我們將學習 C# 中 extern
關鍵字的功能。
C#
中的 extern
關鍵字
使用 extern
修飾符宣告外部實現的方法。當利用 Interop
服務呼叫非託管程式碼時,extern
修飾符通常與 DllImport
屬性一起使用。
在這種情況下,有必要將方法定義為靜態
。
extern
關鍵字也可用於構造外部程式集別名,允許在單個程式集中引用同一元件的多個版本。
同時使用 abstract
和 extern
修飾符來更改單個成員是不可接受的。當你使用 abstract
修飾符時,它表示方法實現未在類中提供,而當你使用 extern
修飾符時,這表明方法實現位於 C# 程式碼之外。
extern
如何在 C#
中工作
如果方法的宣告包含 extern
修飾符,則同意將其視為外部方法。外部方法的實現通常發生在 C# 之外並使用不同的程式語言。
由於外部方法宣告不包括任何實際實現,因此外部方法的方法體包含單個分號。外部方法可能不是通用的。
extern
修飾符通常與 DllImport
屬性結合使用。這種組合允許 Dynamic Link Libraries
或 DLLs
合併來自外部模組的方法。
執行環境有可能支援其他技術,從而可以提供外部方法的實現。當外部方法具有 DllImport
屬性時,方法宣告還必須具有 static
修飾符才能正常執行。
語法:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
例子:
在這個例子中,我們可以使用 extern
別名來匯入功能,然後適當地使用該功能。
使用外部別名
時,單個完全限定名稱可能引用兩種型別。當兩個實體具有相同的完全限定名稱時,表明 namespace
和型別 names
是相同的。
只有當這兩種型別來自兩個單獨的程式集時,才會發生這種情況。
-
第一個編譯成
info1.dll
的庫namespace information { public class info {} }
-
第二個庫編譯為
info2.dll
namespace information { public class info {} }
-
以下是使用
info1.dll
和info2.dll
檔案的應用程式示例。using info; class Test { static void Main() { information i = new information(); } }
-
由於
information
不清晰,無法編譯應用程式。在這種情況下,可以使用extern
別名來清除不確定性。你首先需要更改應用程式使用的
.csproj
檔案,併為每個引用指定其不同的別名
。<ItemGroup> <Reference Include="info1"> <Aliases>i1</Aliases> </Reference> <Reference Include="info2"> <Aliases>i2</Aliases> </Reference> </ItemGroup>
-
使用
extern
別名指令作為該過程的最後一步。extern alias i1; extern alias i2; class Test { static void Main() { i1.information.info first = new i1.information.info(); i2.information.info second = new i2.information.info(); } }
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn