C# の extern キーワード
今日の記事では、C# での extern キーワードの機能について学習します。
C# の extern
外部実装メソッドの宣言は、extern 修飾子を使用して行われます。Interop サービスを利用してアンマネージコードを呼び出す場合、extern 修飾子は DllImport 属性と組み合わせて使用されることがよくあります。
この状況では、メソッドを static として定義する必要があります。
extern キーワードを使用して外部アセンブリエイリアスを作成し、同じコンポーネントの複数のバージョンを単一のアセンブリ内で参照できるようにすることもできます。
abstract と extern の両方の修飾子を同時に使用して単一のメンバーを変更することは許可されていません。abstract 修飾子を使用する場合、メソッド実装が C# コードの外部にあることを示唆する extern 修飾子を使用する場合とは対照的に、メソッド実装がクラスで提供されないことを示します。
C# での extern の仕組み
宣言に extern 修飾子が含まれている場合、メソッドは外部メソッドと見なされることに同意します。外部メソッドの実装は、多くの場合 C# の外部で行われ、異なるプログラミング言語を使用します。
外部メソッド宣言には実際の実装が含まれていないため、外部メソッドのメソッド本体は単一のセミコロンで構成されます。外部メソッドがジェネリックではない可能性があります。
extern 修飾子は、多くの場合、DllImport プロパティと組み合わせて使用されます。この組み合わせにより、ダイナミックリンクライブラリまたは DLL に外部モジュールのメソッドを組み込むことができます。
実行環境は、外部メソッドの実装を提供することを可能にする追加の手法をサポートする可能性があります。外部メソッドに DllImport プロパティがある場合、正しく機能するには、メソッド宣言にも static 修飾子が必要です。
構文:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
例:
この例では、extern エイリアスを使用して機能をインポートし、必要に応じてその機能を使用する場合があります。
外部の alias を使用する場合、1つの完全修飾名が 2つのタイプを参照する場合があります。2つのエンティティが同じ完全修飾名を持っている場合、namespace とタイプ names が同じであることを示します。
これは、2つの種類が 2つの別々のアセンブリから発生した場合にのみ発生する可能性があります。
-
info1.dllにコンパイルされた最初のライブラリnamespace information { public class info {} } -
info2.dllにコンパイルされた 2 番目のライブラリnamespace information { public class info {} } -
以下は、
info1.dllおよびinfo2.dllファイルを使用するアプリケーションの例です。using info; class Test { static void Main() { information i = new information(); } }
-
informationが明確でないため、アプリケーションをコンパイルできません。この状況では、externエイリアスを使用して不確実性を解消できます。まず、アプリケーションが使用する
.csprojファイルを変更し、各参照に個別のaliasを指定する必要があります。<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