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