部分类和访问修饰符问题
Posted
技术标签:
【中文标题】部分类和访问修饰符问题【英文标题】:Partial classes and access modifier issue 【发布时间】:2014-10-13 12:06:56 【问题描述】:根据MSDN Documentation 部分类:
所有部分必须具有相同的可访问性,例如public、private等。
但如果您创建一个 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
有点相关。以上是关于部分类和访问修饰符问题的主要内容,如果未能解决你的问题,请参考以下文章