朋友集会声明的范围是什么?

时间:2013-09-12 13:58:12

标签: c# .net-assembly internal

朋友集会声明的范围是什么?

示例:

A.cs
[assembly: InternalVisibleTo("Friend")]
internal class A { ... }

B.cs
internal class B { ... }

对于名为“Friend”的程序集,可以访问类B吗?

范围是整个项目(甚至汇编语句只设置在一个单独的类中)?

3 个答案:

答案 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打败了我,但正如他所说,声明适用于集会层面。

这对于让您的测试项目访问您的内部方法和类型非常有用:)