C#:为什么成员的可访问性修饰符是可选的(而不是必需的)?

C#:为什么成员的可访问性修饰符是可选的(而不是必需的)?,c#,access-specifier,C#,Access Specifier,我读过Eric Lippert写的这篇文章,但它没有解释可访问性修饰符的具体情况 传统的stackoverflow说总是显式地指定“private”,这意味着成员应该需要修饰符。如果没有定义,就不会有默认修饰符集。在C#中,即使未指定默认修饰符,也会设置一个默认修饰符,因此有时您可能希望知道程序的默认修饰符,以便按自己的方式执行(预期结果) enum、struct或class在典型条件下(在命名空间中或仅在文件中)将默认为internal,但在结构或类中声明时将默认为private 所有方法、字

我读过Eric Lippert写的这篇文章,但它没有解释可访问性修饰符的具体情况


传统的stackoverflow说总是显式地指定“private”,这意味着成员应该需要修饰符。

如果没有定义,就不会有默认修饰符集。在C#中,即使未指定默认修饰符,也会设置一个默认修饰符,因此有时您可能希望知道程序的默认修饰符,以便按自己的方式执行(预期结果)

enum
struct
class
在典型条件下(在命名空间中或仅在文件中)将默认为
internal
,但在结构或类中声明时将默认为
private


所有方法、字段和属性都有默认的访问修饰符“Private”。

如果没有定义,就不会有默认的修饰符集。在C#中,即使未指定默认修饰符,也会设置一个默认修饰符,因此有时您可能希望知道程序的默认修饰符,以便按自己的方式执行(预期结果)

enum
struct
class
在典型条件下(在命名空间中或仅在文件中)将默认为
internal
,但在结构或类中声明时将默认为
private


所有方法、字段和属性都将默认访问修饰符设置为“Private”。

可能是C#的设计者想要和喜欢的“宗教”争论是否包括退款访问修饰符

(在只有一个访问级别的情况下,通常不允许使用访问修饰符:例如,接口或枚举的成员始终为
public
,但不允许写入该值。
partial
方法始终为
private
,但您不能写入该值。因为无法调用
static
构造函数显式地,没有有意义的访问级别。显式接口实现对于直接调用来说并不真正可见,但可以通过接口类型自由访问(如果接口类型从外部可见)。命名空间可以没有访问修饰符。)

当然,与您所建议的相反的规则是,不允许指定不改变任何内容的修饰符。这意味着命名空间的直接成员(包括隐式的“全局命名空间”)不能显式声明为
internal
,并且类或结构的成员(包括嵌套类型)不能具有关键字
private
。有些人使用此约定


请注意,属性和索引器的getter和setter不能指定冗余访问级别。这里只允许两个访问器中的一个(在这种情况下必须有两个)指定更严格的访问。

可能是C#的设计者想要和喜欢的“宗教”关于是否包括退款访问修改器的争论

(在只有一个访问级别的情况下,通常不允许使用访问修饰符:例如,接口或枚举的成员始终为
public
,但不允许写入该值。
partial
方法始终为
private
,但您不能写入该值。因为无法调用
static
构造函数显式地,没有有意义的访问级别。显式接口实现对于直接调用来说并不真正可见,但可以通过接口类型自由访问(如果接口类型从外部可见)。命名空间可以没有访问修饰符。)

当然,与您所建议的相反的规则是,不允许指定不改变任何内容的修饰符。这意味着命名空间的直接成员(包括隐式的“全局命名空间”)不能显式声明为
internal
,并且类或结构的成员(包括嵌套类型)不能具有关键字
private
。有些人使用此约定


请注意,属性和索引器的getter和setter不能指定冗余访问级别。这里只允许两个访问器中的一个访问(在这种情况下必须有两个)要指定更严格的访问权限。

与这类问题通常的情况一样,最终答案只能来自创建该语言的人(当然,假设文档中没有提到)

但是,假设它是因为除了C语言之外,“C”已经受到java(和C++)的强烈影响,并且最好被看作是两个(…)的后裔。 作为旁注,turbopascal的原作者兼Delphi的首席架构师,也是该项目的首席架构师


<>我意识到这是回避问题的原因,所以现在你可以问为什么C++最初允许可选的可视性修改器= p

,通常是这种类型的问题的情况下,一个明确的答案只能来自那些创建语言的人(假设它在文档中没有被处理)。

但是,假设它是因为除了C语言之外,“C”已经受到java(和C++)的强烈影响,并且最好被看作是两个(…)的后裔。 作为旁注,turbopascal的原作者兼Delphi的首席架构师,也是该项目的首席架构师


<>我意识到这是一个回避问题的问题,所以现在你可以问为什么C++最初允许可选的可视性修改器= P< /P>因为MS是这样酷的:)C语言语言规范说:“当类成员声明不包含任何访问修饰符时,假设为私有”。