部分类和访问修饰符问题

17
根据 MSDN文档 关于部分类的定义:

所有部分必须具有相同的可访问性,例如 public private 等。

但如果您创建 WindowsForm 应用程序,则会在两个部分类中拥有默认的 Form 类。
代码如下:
public partial class Form1 : Form
{
    ...
}

设计师:

partial class Form1
{
    ...
}

访问修饰符不同,但它会编译。

我有什么遗漏吗?

1个回答

17

如果在部分类中未指定访问修饰符,则它将使用与其他部分相同的访问修饰符。


C# 5 规范中的相关部分:§10.2.2

当一个部分类声明包括访问权限规定(public、protected、internal 和 private 修饰符)时,它必须与包括访问权限规定的所有其他部分一致。如果任何一个部分都没有包括访问权限规定,则该类型将被赋予适当的默认访问权限(§3.5.1)。

因此,规范表示只有在指定时访问权限才必须与其他部分一致,换句话说,不必在每个部分中都指定。尽管措辞可能需要更改以减少歧义...


我认为是这样,但这与引用的文档相矛盾。 - Naser Asadi
不,这并不违反文档。另一部分是“public”,即使没有明确说明。试着将另一部分改为“private”,你就会明白。请记住,只有一个类,但有许多组成部分。一个单一的类具有单一的可访问性。 - John Saunders
@NaserAsadi,我在我的回答中引用了规范的相关部分。 - Thomas Levesque
4
规范基本上说,仅当“没有任何部分具有修饰符”时默认才适用。如果任何部分具有修饰符,则该修饰符是类的可访问性。但是,如果部分具有冲突的修饰符,则会出现编译错误。 - phoog
1
@NaserAsadi 我曾经写过一个关于省略 private 的回答(https://dev59.com/bWw15IYBdhLWcg3w3vle#18768294),与此有些相关。 - Jeppe Stig Nielsen
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接