朋友大会声明的范围是什么?
例子:
A.cs
[assembly: InternalVisibleTo("Friend")]
internal class A { ... }
B.cs
internal class B { ... }
B
一个名为“Friend”的程序集可以访问类吗?
范围是整个项目吗(甚至汇编语句也只设置在一个类中)?
朋友大会声明的范围是什么?
例子:
A.cs
[assembly: InternalVisibleTo("Friend")]
internal class A { ... }
B.cs
internal class B { ... }
B
一个名为“Friend”的程序集可以访问类吗?
范围是整个项目吗(甚至汇编语句也只设置在一个类中)?
该属性不适用于类,这是因为关键字assembly:
位于它之前。这意味着该属性将应用于整个程序集。
正如您在MSDN页面上看到的那样。该属性的声明指定它只能应用于程序集。因此,“朋友”程序集可以看到程序集中的每个内部。
您可以使用 InternalsVisibleToAttribute 特性来标识给定程序集的一个或多个友元程序集。以下示例使用程序集 A 中的 InternalsVisibleToAttribute 特性并将程序集 AssemblyB 指定为友元程序集。这使程序集 AssemblyB 可以访问程序集 A 中标记为朋友 (Visual Basic) 或内部 (C#) 的所有类型和成员。
取自msdn
你可以看到InternalsVisibleToAttribute
定义如下。注意AttributeTargets
只允许assembly
不用于Types
。
[AttributeUsageAttribute(AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)]
public sealed class InternalsVisibleToAttribute : Attribute
将此属性放置在何处无关紧要,它会使程序集中的所有内部类型对朋友程序集可见。
您的朋友集会可以访问 B。SynerCoder 击败了我,但正如他所说,该声明适用于装配级别。
这对于让您的测试项目访问您的内部方法和类型很有用:)