如何只从程序集中公开一个特定的类?

时间:2009-01-27 13:08:27

标签: c# oop assemblies

假设程序集Assembly1.dll包含3个类:Class C1,C2,C3。

我想只将C1级暴露给外界。无法访问C2和C3类。如何实现这一目标?

注意:将C2和C3类设为私有不是一个选项,因为这将使它们在程序集本身内无法访问。

7 个答案:

答案 0 :(得分:15)

将类C2和C3设为内部,如:

internal class C2
{
//...
}

答案 1 :(得分:7)

正如其他人所说,您使用internal可见性。还有几点:

  • 对于非嵌套类型,internal实际上是C#中的默认类型,因此您不必 来指定它。您是否明确指定默认访问权限取决于个人品味。 (我现在正站在栅栏上,倾向于明确。)

  • 首先,只有嵌套类型可以是私有的 - 再次,这是嵌套类型的默认可见性。

答案 2 :(得分:5)

“internal”关键字指定只能在自己的程序集中访问类。也许你应该用这个标记C2和C3。

答案 3 :(得分:1)

答案 4 :(得分:1)

您可以使用“内部”访问器而不是“私有”,因此您的类可见性将仅限于程序集级别而不是外部。

答案 5 :(得分:1)

internal是要走的路。如果要从其他程序集测试类C2和C3,可以通过在程序集上设置InternalsVisibleTo属性来完成此操作。

答案 6 :(得分:0)

如果您不希望将类暴露给程序集外的COM和.NET,则internal关键字可以正常工作。

但是,如果您希望更好地控制向COM公开的内容,那么将您的类保留为公共类,在项目属性中取消选中“Make Assembly COM Visible”(将其更改为AssemblyInfo.cs),然后向要向COM公开的类添加属性。像这样:

[Guid("12338758-70B4-40B7-75FA-50300015DAC9")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class MyClassToExpose