假设程序集Assembly1.dll包含3个类:Class C1,C2,C3。
我想只将C1级暴露给外界。无法访问C2和C3类。如何实现这一目标?
注意:将C2和C3类设为私有不是一个选项,因为这将使它们在程序集本身内无法访问。
答案 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