C# 分部类和访问修饰符问题

C# 分部类和访问修饰符问题,c#,.net,access-modifiers,partial-classes,C#,.net,Access Modifiers,Partial Classes,根据部分课程的要求: 所有部件必须具有相同的可访问性,例如公共、私有,等等 但是,如果创建WindowsForm应用程序,则默认的Form类将包含在两个分部类中 背后的代码: public partial class Form1 : Form { ... } 设计师: partial class Form1 { ... } 访问修饰符不同,但它会编译 我在这里遗漏了什么吗?如果不在分部类的一部分中指定访问修饰符,它将使用与另一部分相同的访问修饰符 C#5规范的相关部分:§1

根据部分课程的要求:

所有部件必须具有相同的可访问性,例如公共私有,等等

但是,如果创建WindowsForm应用程序,则默认的Form类将包含在两个分部类中

背后的代码:

public partial class Form1 : Form
{
    ...
}
设计师:

partial class Form1
{
    ...
}
访问修饰符不同,但它会编译


我在这里遗漏了什么吗?

如果不在分部类的一部分中指定访问修饰符,它将使用与另一部分相同的访问修饰符


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

当部分类型声明包含可访问性规范(公共、受保护、内部和私有修饰符)时,它必须与包含可访问性规范的所有其他部分一致。如果部分类型的任何部分都不包括可访问性规范,则该类型被赋予适当的默认可访问性(§3.5.1)


因此,规范规定,如果有规定,可访问性必须与其他部分一致;换句话说,它不必在每个部分都指定。措辞可能会变得不那么模棱两可,虽然…

我想是这样,但它反对引用的文档。不,这不是反对文档。另一部分是公共的,即使它没有这样说。尝试将另一部分设置为私有,您将看到。记住,只有一个类,包含许多部分。一个类只有一个可访问性。@Naseraadi不太可能。文档说明所有部件必须具有相同的可访问性,而不是它们必须明确声明相同的可访问性。在您发布的代码中,这两个类确实具有相同的可访问性(尽管是隐式的)。@naseradadi规范本质上说,只有当所有部分都没有修饰符时,默认值才适用。如果任何部分都有修饰符,那么这就是类的可访问性。但是,如果部分有冲突的修饰符,这是一个编译错误。@Naseradadi我曾经写过一个有点相关的。