C#高手必须掌握的4个要点:访问修饰符/可访问性级别/可访问域/可访问性级别的使用限制
2007-01-25 23:31
232 查看
一,访问修饰符
访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。C#有四个重要的访问修饰符:
public
protected
internal
private
使用这些访问修饰符可指定下列五个可访问性级别:
public:访问不受限制。
protected:访问仅限于包含类或从包含类派生的类型。
Internal:访问仅限于当前程序集。
protected internal:访问仅限于当前程序集或从包含类派生的类型。
private:访问仅限于包含类型。
与访问修饰符相关的三个方面:
可访问性级别:使用四个访问修饰符声明五个可访问性级别。
可访问域:指定在程序节的哪个位置可以引用成员。
可访问性级别的使用限制:概述了声明的可访问性级别的使用限制。
二,可访问性级别
使用访问修饰符 public、protected、internal 或 private 可以为成员指定以下声明的可访问性之一。
一个成员或类型只能有一个访问修饰符,使用 protectedinternal 组合时除外。
命名空间上不允许使用访问修饰符。命名空间没有访问限制。
根据发生成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。
不嵌套在其他类型中的顶级类型的可访问性只能是 internal 或 public。这些类型的默认可访问性是 internal。
嵌套类型是其他类型的成员,它们可以具有下表所示的声明的可访问性。
嵌套类型的可访问性取决于它的可访问域,该域是由已声明的成员可访问性和直接包含类型的可访问域这二者共同确定的。但是,嵌套类型的可访问域不能超出包含它的类型的可访问域。
三,可访问域
成员的可访问域指定程序段中可以引用成员的位置。如果成员嵌套在其他类型中,其可访问域由该成员的可访问性级别和直接包含类型的可访问域共同确定。
顶级类型的可访问域至少是声明它的项目的程序文本,即该项目的整个源文件。嵌套类型的可访问域至少是声明它的类型的程序文本,即包括任何嵌套类型的类型体。嵌套类型的可访问域决不能超出包含类型的可访问域。这些概念在以下示例中加以说明。
示例:
该示例包含一个顶级类型 T1 和两个嵌套类 M1 和 M2。这两个类包含具有不同声明的可访问性的字段。在 Main 方法中,每个语句后都有注释,指示每个成员的可访问域。注意,试图引用不可访问的成员的语句被注释掉了。如果希望查看由引用不可访问的成员所导致的编译器错误,请逐个移除注释。
四,可访问性级别的使用限制
声明类型时,最重要的是查看该类型是否必须至少与其他成员或类型具有同样的可访问性。例如,直接基类必须至少与派生类具有同样的可访问性。以下声明将导致编译器错误,因为基类 BaseClass 的可访问性小于 MyClass:
下表汇总了对使用声明的可访问性级别的限制。
访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。C#有四个重要的访问修饰符:
public
protected
internal
private
使用这些访问修饰符可指定下列五个可访问性级别:
public:访问不受限制。
protected:访问仅限于包含类或从包含类派生的类型。
Internal:访问仅限于当前程序集。
protected internal:访问仅限于当前程序集或从包含类派生的类型。
private:访问仅限于包含类型。
与访问修饰符相关的三个方面:
可访问性级别:使用四个访问修饰符声明五个可访问性级别。
可访问域:指定在程序节的哪个位置可以引用成员。
可访问性级别的使用限制:概述了声明的可访问性级别的使用限制。
二,可访问性级别
使用访问修饰符 public、protected、internal 或 private 可以为成员指定以下声明的可访问性之一。
声明的可访问性 | 含义 |
---|---|
public | 访问不受限制。 |
protected | 访问仅限于包含类或从包含类派生的类型。 |
internal | 访问仅限于当前程序集。 |
protected internal | 访问仅限于从包含类派生的当前程序集或类型。 |
private | 访问仅限于包含类型。 |
命名空间上不允许使用访问修饰符。命名空间没有访问限制。
根据发生成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。
不嵌套在其他类型中的顶级类型的可访问性只能是 internal 或 public。这些类型的默认可访问性是 internal。
嵌套类型是其他类型的成员,它们可以具有下表所示的声明的可访问性。
属于 | 默认的成员可访问性 | 该成员允许的声明的可访问性 |
---|---|---|
enum | public | 无 |
class | private | public protected internal private protected internal |
interface | public | 无 //说明接口中的方法和属性隐含是公共及抽象的 |
struct | private | public internal private //因为结构不能派生,所以结构中成员没有protected 和protected internal可访问性级别 |
三,可访问域
成员的可访问域指定程序段中可以引用成员的位置。如果成员嵌套在其他类型中,其可访问域由该成员的可访问性级别和直接包含类型的可访问域共同确定。
顶级类型的可访问域至少是声明它的项目的程序文本,即该项目的整个源文件。嵌套类型的可访问域至少是声明它的类型的程序文本,即包括任何嵌套类型的类型体。嵌套类型的可访问域决不能超出包含类型的可访问域。这些概念在以下示例中加以说明。
示例:
该示例包含一个顶级类型 T1 和两个嵌套类 M1 和 M2。这两个类包含具有不同声明的可访问性的字段。在 Main 方法中,每个语句后都有注释,指示每个成员的可访问域。注意,试图引用不可访问的成员的语句被注释掉了。如果希望查看由引用不可访问的成员所导致的编译器错误,请逐个移除注释。
四,可访问性级别的使用限制
声明类型时,最重要的是查看该类型是否必须至少与其他成员或类型具有同样的可访问性。例如,直接基类必须至少与派生类具有同样的可访问性。以下声明将导致编译器错误,因为基类 BaseClass 的可访问性小于 MyClass:
class BaseClass {...} public class MyClass: BaseClass {...} // Error |
上下文 | 备注 |
---|---|
类 | 类类型的直接基类必须至少与类类型本身具有同样的可访问性。 |
接口 | 接口类型的显式基接口必须至少与接口类型本身具有同样的可访问性。 |
委托 | 委托类型的返回类型和参数类型必须至少与委托类型本身具有同样的可访问性。 |
常数 | 常数的类型必须至少与常数本身具有同样的可访问性。 |
字段 | 字段的类型必须至少与字段本身具有同样的可访问性。 |
方法 | 方法的返回类型和参数类型必须至少与方法本身具有同样的可访问性。 |
属性 | 属性的类型必须至少与属性本身具有同样的可访问性。 |
事件 | 事件的类型必须至少与事件本身具有同样的可访问性。 |
索引器 | 索引器的类型和参数类型必须至少与索引器本身具有同样的可访问性。 |
运算符 | 运算符的返回类型和参数类型必须至少与运算符本身具有同样的可访问性。 |
构造函数 | 构造函数的参数类型必须至少与构造函数本身具有同样的可访问性。 |
示例:
下面的示例包含不同类型的错误声明。每个声明后的注释指示了预期的编译器错误。相关文章推荐
- C#学习基础之可访问性级别的使用限制
- 使用PHP开发你必须得注意的要点
- 访问修饰符的使用
- 访问限制:由于对必须的库。。。。具有一定限制,因此无法访问类型
- Win8系统分配访问限制用户使用范围的设置技巧
- iPhone必须掌握的几个日常使用技巧
- 操作必须使用一个可更新的查询;HTTP 500 - 内部服务器错误; 您未被授权查看该页;您不具备使用所提供的凭据查看该目录或页的权限;HTTP 错误 401.3 - 访问被资源 ACL 拒绝
- c#中4个访问修饰符和8个声明修饰符详解
- Java基础:访问限制修饰符
- 使用Eclipse的几个必须掌握的快捷方式+改默认编码
- win8如何启用分配访问限制特定帐户仅使用一个应用商店应用
- 关于heritrix安装配置时出现"必须限制口令文件读取访问权限"的解决方法
- 想要成为电脑高手必须掌握的八个cmd 命令
- 【转载】接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点
- 单位里有个软件,必须要32位的win7系统下才可以使用,为什么64位下就不能用?请高手指点
- java中局部变量可以使用访问控制修饰符吗?
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- sqlserver2008r2数据库使用触发器对sa及其他数据库账号访问进行IP限制
- Base提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要[
- 成为Android高手必须掌握的28大项内容和10个建议