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


164

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

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



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

Answers:


266

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

从第一个链接:

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

...

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

...

接口默认为内部访问。

...

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


从第二个链接:

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

对于嵌套类型:

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

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

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

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

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

13

从MSDN:

未嵌套在其他类型中的顶级类型只能具有internalpublic可访问性。这些类型的默认可访问性为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.