从外部程序集访问内部类
在外部程序集需要访问供应商提供的内部类型对象的情况下集会时,困境就出现了。本文探讨了如何在不修改供应商程序集的情况下克服这一挑战。
困境
考虑以下场景:外部程序集包含由中的方法返回的对象供应商大会。然而,这个对象实际上是一个内部类的实例,其字段和方法无法从外部程序集访问。
// 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中文网其他相关文章!