部分类和访问修饰符问题

Posted

技术标签:

【中文标题】部分类和访问修饰符问题【英文标题】:Partial classes and access modifier issue 【发布时间】:2014-10-13 12:06:56 【问题描述】:

根据MSDN Documentation 部分类:

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

但如果您创建一个 WindowsForm 应用程序,您将在两个分部类中拥有默认的 Form 类。

背后的代码:

public partial class Form1 : Form

    ...

和设计师:

partial class Form1

    ...

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

我错过了什么吗?

【问题讨论】:

【参考方案1】:

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


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

当部分类型声明包含可访问性规范(public、protected、internal 和 private 修饰符)时,它必须与包含可访问性规范的所有其他部分一致。如果分部类型的任何部分都不包含可访问性规范,则为该类型提供适当的默认可访问性(第 3.5.1 节)。

所以规范说可访问性必须与其他部分一致如果指定了;换句话说,不必在每个部分中都指定它。措辞可能会更改为不那么模棱两可,但...

【讨论】:

我认为是这样,但它违反了引用的文档。 不,这不违反文档。另一部分是public,即使它没有这么说。尝试制作另一部分private,你会看到的。记住只有一个类,有很多部分。一个类有一个可访问性。 @NaserAsadi 不是。该文档声明所有部分必须具有相同的可访问性,而不是它们必须明确声明相同的可访问性。在您发布的代码中,这两个类确实具有相同的可访问性(尽管是隐式的)。 @NaserAsadi 规范本质上说,仅当 没有任何部分具有修饰符时,默认值才适用。 如果任何部分具有修饰符,那么这就是类的可访问性。但是,如果部分有冲突的修饰符,那就是编译错误。 @NaserAsadi 我曾经写过一个answer on omitting private 有点相关。

以上是关于部分类和访问修饰符问题的主要内容,如果未能解决你的问题,请参考以下文章

面向对象访问修饰符

Java 访问权限修饰符 与 非访问权限修饰符

5_JavaSE_修饰符

12类成员访问修饰符public/private/producted/readonly

java基础 --- Java修饰符总结与应用

java基础 --- Java修饰符总结与应用