类、方法、成员、构造函数、委托和接口的默认访问修饰符是什么?
当前回答
看一下Access Modifiers (c#编程指南)
Class and Struct Accessibility Classes and structs that are declared directly within a namespace (in other words, that are not nested within other classes or structs) can be either public or internal. Internal is the default if no access modifier is specified. Struct members, including nested classes and structs, can be declared as public, internal, or private. Class members, including nested classes and structs, can be public, protected internal, protected, internal, private protected or private. The access level for class members and struct members, including nested classes and structs, is private by default. Private nested types are not accessible from outside the containing type. Derived classes cannot have greater accessibility than their base types. In other words, you cannot have a public class B that derives from an internal class A. If this were allowed, it would have the effect of making A public, because all protected or internal members of A are accessible from the derived class. You can enable specific other assemblies to access your internal types by using the InternalsVisibleToAttribute. For more information, see Friend Assemblies. Class and Struct Member Accessibility Class members (including nested classes and structs) can be declared with any of the six types of access. Struct members cannot be declared as protected because structs do not support inheritance. Normally, the accessibility of a member is not greater than the accessibility of the type that contains it. However, a public member of an internal class might be accessible from outside the assembly if the member implements interface methods or overrides virtual methods that are defined in a public base class. The type of any member that is a field, property, or event must be at least as accessible as the member itself. Similarly, the return type and the parameter types of any member that is a method, indexer, or delegate must be at least as accessible as the member itself. For example, you cannot have a public method M that returns a class C unless C is also public. Likewise, you cannot have a protected property of type A if A is declared as private. User-defined operators must always be declared as public and static. For more information, see Operator overloading. Finalizers cannot have accessibility modifiers. Other Types Interfaces declared directly within a namespace can be declared as public or internal and, just like classes and structs, interfaces default to internal access. Interface members are always public because the purpose of an interface is to enable other types to access a class or struct. No access modifiers can be applied to interface members. Enumeration members are always public, and no access modifiers can be applied. Delegates behave like classes and structs. By default, they have internal access when declared directly within a namespace, and private access when nested.
其他回答
命名空间级别:internal
类型级别:private
简而言之:尽可能少的访问(参见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 (我喜欢微软的网址…)
我想添加一些文档链接。点击这里查看更多细节。
看一下Access Modifiers (c#编程指南)
Class and Struct Accessibility Classes and structs that are declared directly within a namespace (in other words, that are not nested within other classes or structs) can be either public or internal. Internal is the default if no access modifier is specified. Struct members, including nested classes and structs, can be declared as public, internal, or private. Class members, including nested classes and structs, can be public, protected internal, protected, internal, private protected or private. The access level for class members and struct members, including nested classes and structs, is private by default. Private nested types are not accessible from outside the containing type. Derived classes cannot have greater accessibility than their base types. In other words, you cannot have a public class B that derives from an internal class A. If this were allowed, it would have the effect of making A public, because all protected or internal members of A are accessible from the derived class. You can enable specific other assemblies to access your internal types by using the InternalsVisibleToAttribute. For more information, see Friend Assemblies. Class and Struct Member Accessibility Class members (including nested classes and structs) can be declared with any of the six types of access. Struct members cannot be declared as protected because structs do not support inheritance. Normally, the accessibility of a member is not greater than the accessibility of the type that contains it. However, a public member of an internal class might be accessible from outside the assembly if the member implements interface methods or overrides virtual methods that are defined in a public base class. The type of any member that is a field, property, or event must be at least as accessible as the member itself. Similarly, the return type and the parameter types of any member that is a method, indexer, or delegate must be at least as accessible as the member itself. For example, you cannot have a public method M that returns a class C unless C is also public. Likewise, you cannot have a protected property of type A if A is declared as private. User-defined operators must always be declared as public and static. For more information, see Operator overloading. Finalizers cannot have accessibility modifiers. Other Types Interfaces declared directly within a namespace can be declared as public or internal and, just like classes and structs, interfaces default to internal access. Interface members are always public because the purpose of an interface is to enable other types to access a class or struct. No access modifiers can be applied to interface members. Enumeration members are always public, and no access modifiers can be applied. Delegates behave like classes and structs. By default, they have internal access when declared directly within a namespace, and private access when nested.
Internal是类的默认访问修饰符。
Private是类成员的默认访问修饰符。
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?
- c#对象列表,我如何得到一个属性的和