C# 如何从程序集中只公开一个特定类?
假设assembly assembly 1.dll包含3个类:类C1、C2、C3 我只想向外界公开C1类。C2类和C3类将无法访问。如何实现这一点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。关
注意:将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中的默认值吗。*?对我来说,这本身就是一个明确的理由…@卡尔:不,默认值没有随着时间的推移而改变。