Heim > Backend-Entwicklung > C++ > Wie geht der C#-Compiler mit der Instanziierung von COM-Typen und der Übergabe von Ref-Parametern um?

Wie geht der C#-Compiler mit der Instanziierung von COM-Typen und der Übergabe von Ref-Parametern um?

Susan Sarandon
Freigeben: 2025-01-10 17:32:48
Original
297 Leute haben es durchsucht

How Does the C# Compiler Handle COM Type Instantiation and Ref Parameter Passing?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage