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

C# 如何从程序集中只公开一个特定类?,c#,oop,assemblies,C#,Oop,Assemblies,假设assembly assembly 1.dll包含3个类:类C1、C2、C3 我只想向外界公开C1类。C2类和C3类将无法访问。如何实现这一点 注意:将C2和C3类设置为私有不是一个选项,因为这将使它们在组件内部不可访问。将C2和C3类设置为内部,如: internal class C2 { //... } 将C2和C3类设置为内部,如: internal class C2 { //... } “internal”关键字指定类只能在其自己的程序集中访问。也许您应该用这个标记C2和C3。关

假设assembly assembly 1.dll包含3个类:类C1、C2、C3

我只想向外界公开C1类。C2类和C3类将无法访问。如何实现这一点


注意:将C2和C3类设置为私有不是一个选项,因为这将使它们在组件内部不可访问。

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

internal class C2
{
//...
}

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

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

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

使用关键字

更多链接


使用关键字

更多链接



您可以使用“内部”访问器而不是“私有”访问器,这样类的可见性将限制在程序集级别而不是外部。

您可以使用“内部”访问器而不是“私有”访问器,这样类的可见性将限制在程序集级别而不是外部。

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

  • 对于非嵌套类型,内部实际上是C#中的默认值,因此不必指定它。是否明确指定默认访问权限取决于个人喜好。(我目前持观望态度,倾向于直言不讳。)

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


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

  • 对于非嵌套类型,内部实际上是C#中的默认值,因此不必指定它。是否明确指定默认访问权限取决于个人喜好。(我目前持观望态度,倾向于直言不讳。)

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


内部
是一条路要走。如果要从不同的程序集测试C2和C3类,可以通过在程序集上设置属性来实现

内部
是一条出路。如果要从不同的程序集测试C2和C3类,可以通过在程序集上设置属性来实现

如果不想将类同时暴露给程序集外部的COM和.NET,则internal关键字可以正常工作

但是,如果您想更好地控制向COM公开的内容,方法是将类保留为公共类,请取消选中项目属性中的“使程序集COM可见”(这会在封面下更改AssemblyInfo.cs),然后向要向COM公开的类添加属性。大概是这样的:

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

如果不想将类同时暴露给程序集外部的COM和.NET,则internal关键字可以正常工作

但是,如果您想更好地控制向COM公开的内容,方法是将类保留为公共类,请取消选中项目属性中的“使程序集COM可见”(这会在封面下更改AssemblyInfo.cs),然后向要向COM公开的类添加属性。大概是这样的:

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

public不是.NET 1.*中的默认值吗?对我来说,这本身就是一个明确的理由…@Carl:不,默认值没有随着时间的推移而改变。public不是.NET1中的默认值吗。*?对我来说,这本身就是一个明确的理由…@卡尔:不,默认值没有随着时间的推移而改变。