类、方法、成员、构造函数、委托和接口的默认访问修饰符是什么?
当前回答
命名空间级别:internal
类型级别:private
其他回答
Internal是默认的修饰符
简而言之:尽可能少的访问(参见Jon Skeet的回答)。
长一点的回答:
非嵌套类型、枚举和委托可访问性(可能只有内部或公共可访问性)
|默认|允许声明的访问权限 ------------------------------------------------------------------ 命名空间| public | none(总是隐式公共) Enum | public | public,内部 接口| internal | public, internal 类| internal | public, internal Struct | internal | public, internal 委托|内部|公共,内部
嵌套类型和成员可访问性
| Default | Permitted declared accessibilities ------------------------------------------------------------------ namespace | public | none (always implicitly public) enum | public | All¹ interface | public | All¹ class | private | All¹ struct | private | public, internal, private² delegate | private | All¹ constructor | private | All¹ enum member | public | none (always implicitly public) interface member | public | none (always implicitly public) method | private | All¹ field | private | All¹ user-defined operator| none | public (must be declared public) ¹ All === public, protected, internal, private, protected internal ² structs cannot inherit from structs or classes (although they can, interfaces), hence protected is not a valid modifier
嵌套类型的可访问性取决于其可访问域,该域由成员声明的可访问性和直接包含类型的可访问性域共同决定。但是,嵌套类型的可访问域不能超过包含类型的可访问域。
注意:CIL还提供了受保护的和内部的(与现有的受保护的”或“内部的”相对),但据我所知,这在c#中目前是不可用的。
See:
http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx http://msdn.microsoft.com/en-us/library/ms173121.aspx http://msdn.microsoft.com/en-us/library/cx03xt0t.aspx (我喜欢微软的网址…)
最简单的答案是.....
c#中的所有成员默认都使用LEAST accessible修饰符。
这就是为什么程序集中的所有顶级类默认情况下都是“内部”的,这意味着它们对于所处的程序集是公共的,但对于外部程序集是私有的或排除在外的。顶级类的唯一其他选项是public,它更容易访问。对于嵌套类型,除了少数罕见的例外,如枚举成员和接口,它都是私有的,只能是公共的。一些例子。在顶级类和接口的情况下,默认值是:
class Animal与内部类Animal相同
interface动物与公共接口相同
在嵌套类和接口(内部类型)的情况下,默认值为:
class Animal与private class Animal相同
interface动物与私有接口动物相同
如果您只是假设c#类型的默认值总是最私密的,那么在需要更改默认值之前,您不需要使用自定义访问器。他们在箱子外面很安全!
Internal是类的默认访问修饰符。
Private是类成员的默认访问修饰符。
命名空间级别:internal
类型级别:private
推荐文章
- HTTP POST返回错误:417“期望失败。”
- 如何在。net中创建和使用资源
- 为什么Path。以Path.DirectorySeparatorChar开头的文件名合并不正确?
- 如何在c#中获得正确的时间戳
- Linq选择列表中存在的对象(A,B,C)
- c# .NET中的App.config是什么?如何使用它?
- c#:如何获得一个字符串的第一个字符?
- String类中的什么方法只返回前N个字符?
- 更好的方法将对象转换为int类型
- 我可以将c#字符串值转换为转义字符串文字吗?
- 在c#中转换char到int
- c#中朋友的对等物是什么?
- 关键字使用virtual+override vs. new
- 在ASP中选择Tag Helper。NET Core MVC
- 如何在没有任何错误或警告的情况下找到构建失败的原因