COM-Typen in C# erkennen
Die Art und Weise, wie der C#-Compiler COM-Typen verarbeitet, ist sehr einzigartig. Ein bemerkenswertes Beispiel ist die Möglichkeit, Schnittstellen zu instanziieren, wie im folgenden Beispiel gezeigt:
<code class="language-csharp">Word.Application app = new Word.Application();</code>
Obwohl die Anwendung eine Schnittstelle ist, kann sie instanziiert werden. Dies wird durch die Konvertierung von Aufrufen in Type.GetTypeFromCLSID() und Activator.CreateInstance erreicht.
Ein weiteres einzigartiges Verhalten in C# 4 ist die Möglichkeit, Nicht-Ref-Parameter an Ref-Parameter zu übergeben. Der Compiler fügt automatisch eine lokale Variable hinzu, um Parameter als Referenz zu übergeben, ohne den tatsächlichen Wert zu beeinflussen.
Um zu verstehen, wie der Compiler diese Transformationen durchführt, können wir ein benutzerdefiniertes Beispiel erstellen:
<code class="language-csharp">[ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")] public interface Dummy { void Foo(ref int x); } class Test { static void Main() { Dummy dummy = null; dummy.Foo(10); } }</code>
Dieser Code wird erfolgreich ausgeführt und zeigt, wie der Ref-Parameter als Wert übergeben wird.
Nehmen wir jedoch an, wir möchten versuchen, die Schnittstelle zu instanziieren:
<code class="language-csharp">Dummy dummy = new Dummy();</code>
Obwohl dieser Code nicht erfolgreich ausgeführt werden kann, unterstreicht er die Notwendigkeit, die „Magie“ des Compilers zu untersuchen. Um eine Schnittstelle tatsächlich zu instanziieren, können wir das CoClass-Attribut verwenden:
<code class="language-csharp">[System.Runtime.InteropServices.CoClass(typeof(Test))] public interface Dummy { }</code>
Das CoClass-Attribut verknüpft eine Implementierungsklasse mit einer Schnittstelle und ermöglicht so deren Instanziierung als konkretes Objekt. Dieser Ansatz wird normalerweise verwendet, wenn eine COM-API die Instanziierung einer Schnittstelle erfordert.
Das obige ist der detaillierte Inhalt vonWie geht der C#-Compiler mit der Instanziierung von COM-Typen und der Übergabe von Ref-Parametern um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!