C#의 extern 키워드
오늘 기사에서는 C#의 extern
키워드의 기능에 대해 알아보겠습니다.
C#
의 extern
외부에서 구현된 메소드 선언은 extern
수식어를 사용하여 수행됩니다. Interop
서비스를 사용하여 비관리 코드를 호출할 때 extern
수정자는 DllImport
속성과 함께 자주 사용됩니다.
이 상황에서 메서드를 static
으로 정의해야 합니다.
extern
키워드를 사용하여 외부 어셈블리 별칭을 구성할 수도 있으므로 단일 어셈블리 내에서 동일한 구성 요소의 여러 버전을 참조할 수 있습니다.
abstract
및 extern
수식어를 동시에 사용하여 단일 멤버를 변경하는 것은 허용되지 않습니다. abstract
수정자를 사용하면 메서드 구현이 C# 코드 외부에 있음을 나타내는 extern
수정자를 사용할 때와 달리 클래스에서 메서드 구현이 제공되지 않음을 나타냅니다.
extern
이 C#
에서 작동하는 방식
메소드 선언에 extern
수정자가 포함된 경우 메소드가 외부 메소드로 간주된다는 데 동의합니다. 외부 메서드의 구현은 종종 C# 외부에서 발생하며 다른 프로그래밍 언어를 사용합니다.
외부 메서드 선언에는 실제 구현이 포함되지 않으므로 외부 메서드의 메서드 본문은 단일 세미콜론으로 구성됩니다. 외부 메서드가 제네릭이 아닐 가능성이 있습니다.
extern
수정자는 DllImport
속성과 함께 자주 사용됩니다. 이 조합을 통해 Dynamic Link Libraries
또는 DLL
이 외부 모듈의 메서드를 통합할 수 있습니다.
실행 환경이 외부 메서드의 구현을 제공할 수 있도록 하는 추가 기술을 지원할 가능성이 있습니다. 외부 메서드에 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
파일을 변경하고 각 참조에 고유한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