Maison > développement back-end > C++ > Comment le compilateur C# gère-t-il l'instanciation de type COM et le passage des paramètres de référence ?

Comment le compilateur C# gère-t-il l'instanciation de type COM et le passage des paramètres de référence ?

Susan Sarandon
Libérer: 2025-01-10 17:32:48
original
297 Les gens l'ont consulté

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

Détection des types COM en C#

La façon dont le compilateur C# gère les types COM est tout à fait unique. Un exemple notable est la possibilité d'instancier des interfaces, comme le montre l'exemple suivant :

<code class="language-csharp">Word.Application app = new Word.Application();</code>
Copier après la connexion

Bien qu'Application soit une interface, elle peut être instanciée. Ceci est réalisé en convertissant les appels en Type.GetTypeFromCLSID() et Activator.CreateInstance.

Un autre comportement unique en C# 4 est la possibilité de transmettre des paramètres non-ref aux paramètres ref. Le compilateur ajoute automatiquement une variable locale pour transmettre les paramètres par référence sans affecter la valeur réelle.

Pour comprendre comment le compilateur effectue ces transformations, nous pouvons créer un exemple personnalisé :

<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>
Copier après la connexion

Ce code s'exécutera avec succès et montre comment transmettre le paramètre ref par valeur.

Cependant, disons que nous voulons essayer d'instancier l'interface :

<code class="language-csharp">Dummy dummy = new Dummy();</code>
Copier après la connexion

Bien que ce code ne s'exécute pas correctement, il souligne la nécessité d'étudier la "magie" du compilateur. Pour réellement instancier une interface, nous pouvons utiliser l'attribut CoClass :

<code class="language-csharp">[System.Runtime.InteropServices.CoClass(typeof(Test))]
public interface Dummy { }</code>
Copier après la connexion

L'attribut CoClass associe une classe d'implémentation à une interface, lui permettant d'être instanciée comme un objet concret. Cette approche est généralement utilisée lorsqu'une API COM nécessite l'instanciation d'une interface.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal