Maison > développement back-end > C++ > Comment puis-je accéder aux classes internes à partir d'un assembly externe sans modifier l'assembly du fournisseur ?

Comment puis-je accéder aux classes internes à partir d'un assembly externe sans modifier l'assembly du fournisseur ?

DDD
Libérer: 2024-12-25 05:44:21
original
779 Les gens l'ont consulté

How Can I Access Internal Classes from an External Assembly Without Modifying the Vendor Assembly?

Accès aux classes internes à partir d'assemblys externes

Dans les scénarios où un assembly externe nécessite l'accès à un objet de type interne dans un assemblage fourni par le fournisseur assemblée, une situation difficile surgit. Cet article explore comment surmonter ce défi sans modifier l'assembly du fournisseur.

Le dilemme

Considérez le scénario suivant : un assembly externe contient un objet renvoyé par une méthode dans l’assemblée des vendeurs. Cependant, cet objet est en réalité une instance d'une classe interne dont les champs et les méthodes sont inaccessibles depuis l'assembly externe.

// Vendor assembly
public class Vendor
{
    private InternalClass _internal;
    public object Tag { get { return _internal; } }
}

// External assembly
public class MyClass
{
    public void AccessTest()
    {
        Vendor vendor = new Vendor();
        object value = vendor.Tag;
        // Here we want to access InternalClass.test
    }
}
Copier après la connexion

Une solution : attribut InternalsVisibleTo

Par par défaut, les membres internes sont accessibles uniquement dans l'assemblage où ils sont définis. Cependant, il existe une exception pour les assemblys « amis ».

Pour accorder à un assembly externe (l'assembly « ami ») l'accès aux membres internes, ajoutez l'attribut [assembly: InternalsVisibleTo] au fichier AssemblyInfo.cs de l'assemblage du fournisseur.

[assembly: InternalsVisibleTo("NameOfFriendAssembly")]
Copier après la connexion

Cet attribut permet à l'assemblage externe d'accéder aux membres internes de l'assemblage du fournisseur comme s'ils étaient internes au sien. assemblage.

Remarque : Cette solution ne convient qu'à des fins de test, car elle expose les membres internes à des assemblages externes.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal