0

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

例子:

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

B.cs
internal class B { ... }

B一个名为“Friend”的程序集可以访问类吗?

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

4

3 回答 3

4

该属性不适用于类,这是因为关键字assembly:位于它之前。这意味着该属性将应用于整个程序集。

正如您在MSDN页面上看到的那样。该属性的声明指定它只能应用于程序集。因此,“朋友”程序集可以看到程序集中的每个内部。

于 2013-09-12T14:00:26.200 回答
1

您可以使用 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

将此属性放置在何处无关紧要,它会使程序集中的所有内部类型对朋友程序集可见。

于 2013-09-12T14:03:37.033 回答
0

您的朋友集会可以访问 B。SynerCoder 击败了我,但正如他所说,该声明适用于装配级别。

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

于 2013-09-12T14:10:54.397 回答