10个答案
命名空间MyCompany { 类外部 { 无效Foo(){} 类内部{} } }
命名空间MyCompany { 内部类外部 { 私有void Foo(){} 私有类内部{} } }
公共字符串名称 { 获取{…} 私有集{…}//这不是默认值,必须显式执行 }
取决于上下文 仅进行成员声明 某些类型的声明 允许访问。 此外,当成员声明 不包括任何访问修饰符, 声明的上下文 发生决定默认值 声明的可访问性。
命名空间隐式具有公共声明的可访问性。 无访问权限 命名空间上允许使用修饰符 声明。 编译单元或命名空间中声明的类型可以具有public或 内部声明的可访问性和 默认为内部声明 可访问性。 类成员可以具有五种声明的可访问性中的任何一种 并默认为private声明 可访问性。 (请注意 声明为类的成员可以 申报五种中的任何一种 可访问性,而声明了类型 作为命名空间的成员可以具有 仅公开或内部声明 可访问性。) 结构成员可以声明public、internal或private 可访问性和默认为私有 声明了可访问性,因为结构 隐式密封。 结构构件 在结构中引入(即,不是 由该结构继承)不能具有 受保护或受保护内部 声明的可访问性。 (请注意 声明为结构成员的类型 可以有公共、内部或私有 声明的可访问性,而类型 声明为命名空间的成员 只能具有公共或内部 声明的可访问性。) 接口成员隐式地具有公共声明的可访问性。 不 上允许使用访问修饰符 接口成员声明。 枚举成员隐式具有公共声明的可访问性。 不 允许在上使用访问修饰符 枚举成员声明。
顶级类:内部 方法:私有 成员(除非是接口或枚举):私有(包括嵌套类) 成员(接口或枚举的):public 构造函数:private(注意,如果没有显式定义构造函数,则会自动定义公共默认构造函数) 委托:内部 接口:内部 显式实现的接口成员:public!
-
18 -
1 @不不,这不是私人的。 它是公开的。 它只是在实现类型中没有槽,因此如果 类Foo:IFoo{IFoo.M(){}}。。。 Foo a=新的Foo(); ,您无法访问 M(M) 具有 a.M() ,但您可以使用访问它 (a作为IFoo)。 M() (有关详细信息,请查看规范) – M.斯特拉姆 评论 2016年10月20日9:54 -
|默认|允许的声明可访问性 ------------------------------------------------------------------ namespace|public|none(始终隐式公开) enum|public|public,内部 接口|内部|公共,内部 类|内部|公共,内部 struct|internal|public,内部 委托|内部|公共,内部
|默认|允许的声明可访问性 ------------------------------------------------------------------ namespace|public|none(始终隐式公开) enum|public|全部¹ 接口|public|All¹ class|private|All¹类 struct|private|public、internal、private² 委托|私人|全部 构造函数|私有|所有¹ enum成员| public | none(总是隐式public) 接口成员|公共|无(始终隐式公开) 方法|private|All¹ 字段|私有|全部¹ 用户定义运算符|none|public(必须声明为public)
¹所有===公共、受保护、内部、私有、受保护内部
²结构不能继承自结构或类(尽管它们可以继承接口),因此protected不是有效的修饰符
-
1 -
-
1
类和结构可访问性
直接在命名空间中声明的类和结构(换句话说,不嵌套在其他类或结构中)可以是公共的,也可以是内部的。 如果未指定访问修饰符,则默认为“内部”。
结构成员(包括嵌套类和结构)可以声明为public、internal或private。 类成员(包括嵌套类和结构)可以是public、protected internal、protecting、internal或private。 默认情况下,类成员和结构成员(包括嵌套类和结构)的访问级别是私有的。 无法从包含类型外部访问私有嵌套类型。
派生类的可访问性不能大于其基类型。 换句话说,您不能拥有从内部类a派生的公共类B。如果允许这样做,则会使a成为公共类,因为a的所有受保护或内部成员都可以从派生类访问。
您可以使用
内部可见到属性 。有关详细信息,请参阅朋友集合。
类和结构成员可访问性
类成员(包括嵌套类和结构)可以用六种访问类型中的任何一种进行声明。 结构成员不能声明为受保护,因为结构不支持继承。
通常,成员的可访问性不大于包含该成员的类型的可访问度。但是,如果成员实现接口方法或重写公共基类中定义的虚拟方法,则可以从程序集外部访问内部类的公共成员。
作为字段、属性或事件的任何成员的类型必须至少与成员本身一样可访问。 类似地,作为方法、索引器或委托的任何成员的返回类型和参数类型必须至少与成员本身一样可访问。 例如,除非C也是公共的,否则不能有返回类C的公共方法M。 同样,如果a声明为private,则不能具有类型a的受保护属性。
用户定义的运算符必须始终声明为public和static。 有关更多信息,请参阅操作员过载。
终结器不能具有可访问性修饰符。
其他类型
直接在名称空间中声明的接口可以声明为公共或内部,就像类和结构一样,接口默认为内部访问。 接口成员始终是公共的,因为接口的目的是使其他类型能够访问类或结构。 没有访问修饰符可以应用于接口成员。
枚举成员始终是公共的,不能应用任何访问修饰符。
委托的行为类似于类和结构。 默认情况下,在命名空间中直接声明时,它们具有内部访问权限,在嵌套时具有专用访问权限。
班级成员是 私有的 默认情况下。
接口成员包括 公众的 默认情况下。 (接口不允许 我们将指定其成员的任何类型的可访问性。) 注: 如果您尝试为接口的成员指定任何访问说明符,则会显示编译错误。
结构构件为 私有的 默认情况下。
类MyClass{ ... }
类MyClass{ 类MySubClass{ ... } }