C#类和成员(字段,方法等)的默认可见性?


164

我正在尝试查找C#各个方面的默认可见性的参考。类类型,字段,方法,枚举等

有人可以提供这些列表及其默认可见性(即没有前缀修饰符)吗?



8
我不会认为它是重复的...这个问题是特定的(THIS的默认设置是什么?),这个问题很广泛(所有默认值是什么?)
— WernerCD 2010年

Answers:


266

您所需要的所有信息都可以在这里和这里找到(感谢Reed Copsey):

从第一个链接:

直接在名称空间中声明的类和结构(换句话说,未嵌套在其他类或结构中)可以是公共的或内部的。如果未指定访问修饰符,则默认为Internal。

...

默认情况下,类成员和结构成员(包括嵌套的类和结构)的访问级别是私有的。

...

接口默认为内部访问。

...

代表的行为类似于类和结构。默认情况下,当直接在名称空间中声明时,它们具有内部访问权,而当嵌套时,它们具有私有访问权。


从第二个链接:

不嵌套在其他类型中的顶级类型只能具有内部或公共可访问性。这些类型的默认可访问性是internal。

对于嵌套类型:

成员的默认成员可访问性
---------- ----------------------------
枚举公众
私人课
公共接口
私人结构

6
来自Reed信息的不错的汇编,但是您忘了指定这种访问修饰符也适用于方法。
— 2014年

4
@Joel是什么意思?他明确指出“成员”。成员是数据和行为,因此包括方法。
— rism

如果有任何vb.net开发人员正在考虑此问题,则vb会有所不同。vb类成员的默认范围是Public。Enum成员也Public。仅在您的情况下使用显式作用域可能会减少混淆,因为很有可能在某些时候c#开发人员会翻译或读取它​​。不幸的是,vb.net中的代码生成无法为您完成此操作。
— toddmo'3

我将添加一个类中的嵌套接口,默认情况下是私有的,而不是内部的。
— Frank Bryce

13

从MSDN:

未嵌套在其他类型中的顶级类型只能具有internal或public可访问性。这些类型的默认可访问性为internal。


嵌套类型是其他类型的成员,可以声明其可访问性,如下表所示。

默认的嵌套成员辅助功能和允许的辅助功能修改器

来源:辅助功能级别(C#参考)(12月6日日,2017)


9

默认情况下,类的访问修饰符为internal。这意味着可以在同一程序集中访问一个类。但是,如果我们希望从其他程序集中访问该类,则必须将其公开。


19
其他答案中已经存在此信息。仅当您需要提供其他信息或认为其他答案有误时,才应回答一个问题,尤其是这样的旧问题。无论如何,欢迎使用Stack Overflow。
— Gorpik 2012年

不一定需要将一个类公开,以便其他程序集可以访问。可以使用InternalsVisibleToAttribute类[assembly:InternalsVisibleTo("Friend1b")]
— 亚当(Adam)

0

默认情况下为private。除非嵌套,否则类为internal。


1
枚举默认不是公开的吗?
— 瑞安·彼得斯

4
@杰伊:除非他们被嵌套。@Ryan:不,默认情况下,非嵌套枚举是内部的。
— 乔恩·斯基特

2
@Ryan:默认情况下,枚举成员是公共的,但枚举本身是内部的。
— 里德·科普西

@ReedCopsey但是我正在学习的书清楚地指出了这一点enum members are private by default, so to use them outside the enum we should declare them as public。您能解释一下为什么这本书与您所说的相矛盾吗?谢谢。

如果@ user5794376(显然是已删除的帐户)正在阅读的任何书籍,如果他们说的是真实的,则应给予所有1星级评论。只需要查看Microsoft Docs即可知道默认情况下枚举成员是公开的,这就是为什么通常的做法是只对枚举不明确。
— 罗德尼·弗利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.