extern (odwołanie w C#)
Modyfikator extern
służy do deklarowania metody implementowane zewnętrznie. Typowym zastosowaniem extern
modyfikatora jest użycie atrybutu DllImport
w przypadku używania usług Międzyoperajności w celu wywołania kodu niezarządzanego. W takim przypadku metoda musi być również zadeklarowana jako static
, jak pokazano w poniższym przykładzie:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
Słowo extern
kluczowe może również definiować alias zestawu zewnętrznego, co umożliwia odwołanie się do różnych wersji tego samego składnika z poziomu pojedynczego zestawu. Aby uzyskać więcej informacji, zobacz extern alias.
Jest to błąd podczas modyfikowania tego samego elementu członkowskiego za pomocą abstrakcji i extern
modyfikatorów. extern
Użycie modyfikatora oznacza, że metoda jest implementowana poza kodem języka C#, natomiast użycie abstract
modyfikatora oznacza, że implementacja metody nie jest podana w klasie.
Użycie słowa kluczowego extern podlega większym ograniczeniom w języku C# niż w języku C++. Aby porównać słowo kluczowe języka C# ze słowem kluczowym C++, zobacz Using extern to Specify Linkage in the C++ Language Reference (Używanie externu do określania połączenia w dokumentacji języka C++).
Przykład 1
W tym przykładzie program odbiera ciąg od użytkownika i wyświetla go wewnątrz pola komunikatu. Program używa MessageBox
metody zaimportowanej z biblioteki User32.dll.
//using System.Runtime.InteropServices;
class ExternTest
{
[DllImport("User32.dll", CharSet=CharSet.Unicode)]
public static extern int MessageBox(IntPtr h, string m, string c, int type);
static int Main()
{
string myString;
Console.Write("Enter your message: ");
myString = Console.ReadLine();
return MessageBox((IntPtr)0, myString, "My Message Box", 0);
}
}
Przykład 2
W tym przykładzie pokazano program w języku C#, który wywołuje bibliotekę C (natywną bibliotekę DLL).
Utwórz następujący plik C i nadaj mu
cmdll.c
nazwę :// cmdll.c // Compile with: -LD int __declspec(dllexport) SampleMethod(int i) { return i*10; }
Otwórz okno wiersza polecenia narzędzi natywnych programu Visual Studio x64 (lub x32) z katalogu instalacyjnego programu Visual Studio i skompiluj
cmdll.c
plik, wpisując cl -LD cmdll.c w wierszu polecenia.W tym samym katalogu utwórz następujący plik C# i nadaj mu
cm.cs
nazwę :// cm.cs using System; using System.Runtime.InteropServices; public class MainClass { [DllImport("Cmdll.dll")] public static extern int SampleMethod(int x); static void Main() { Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5)); } }
Otwórz okno wiersza polecenia narzędzi natywnych programu Visual Studio x64 (lub x32) z katalogu instalacyjnego programu Visual Studio i skompiluj
cm.cs
plik, wpisując polecenie:csc cm.cs (dla wiersza polecenia x64) — lub — csc -platform:x86 cm.cs (w wierszu polecenia x32)
Spowoduje to utworzenie pliku
cm.exe
wykonywalnego .Uruchom program
cm.exe
. MetodaSampleMethod
przekazuje wartość 5 do pliku DLL, który zwraca wartość pomnożną przez 10. Program generuje następujące dane wyjściowe:SampleMethod() returns 50.
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.