首页 >后端开发 >C++ >如何在不修改供应商程序集的情况下从外部程序集访问内部类?

如何在不修改供应商程序集的情况下从外部程序集访问内部类?

DDD
DDD原创
2024-12-25 05:44:21788浏览

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

从外部程序集访问内部类

在外部程序集需要访问供应商提供的内部类型对象的情况下集会时,困境就出现了。本文探讨了如何在不修改供应商程序集的情况下克服这一挑战。

困境

考虑以下场景:外部程序集包含由中的方法返回的对象供应商大会。然而,这个对象实际上是一个内部类的实例,其字段和方法无法从外部程序集访问。

// 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
    }
}

解决方案:InternalsVisibleTo 属性

通过默认情况下,内部成员只能在定义它们的程序集中访问。但是,“朋友”程序集有一个例外。

要授予外部程序集(“朋友”程序集)对内部成员的访问权限,请将 [程序集:InternalsVisibleTo] 属性添加到以下程序集的 AssemblyInfo.cs 文件中:供应商程序集。

[assembly: InternalsVisibleTo("NameOfFriendAssembly")]

此属性允许外部程序集访问供应商程序集的内部成员,就好像它们是其自身的内部成员一样程序集。

注意:此解决方案仅适用于测试目的,因为它将内部成员公开给外部程序集。

以上是如何在不修改供应商程序集的情况下从外部程序集访问内部类?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn