博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一,访问修饰符

访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。C#有四个重要的访问修饰符:

使用这些访问修饰符可指定下列五个可访问性级别:

public:访问不受限制。

protected:访问仅限于包含类或从包含类派生的类型。

Internal:访问仅限于当前程序集。

protected internal:访问仅限于当前程序集或从包含类派生的类型。

private:访问仅限于包含类型。

与访问修饰符相关的三个方面:

二,可访问性级别

使用访问修饰符 publicprotectedinternal private 可以为成员指定以下声明的可访问性之一。

声明的可访问性含义

public

访问不受限制。

protected

访问仅限于包含类或从包含类派生的类型。

internal

访问仅限于当前程序集。

protected internal

访问仅限于从包含类派生的当前程序集或类型。

private

访问仅限于包含类型。

一个成员或类型只能有一个访问修饰符,使用 protectedinternal 组合时除外。

命名空间上不允许使用访问修饰符。命名空间没有访问限制。

根据发生成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。

不嵌套在其他类型中的顶级类型的可访问性只能是 internal public。这些类型的默认可访问性是 internal

嵌套类型是其他类型的成员,它们可以具有下表所示的声明的可访问性。

属于默认的成员可访问性该成员允许的声明的可访问性

enum

public

class

private

public

protected

internal

private

protected internal

interface

public

//说明接口中的方法和属性隐含是公共及抽象的

struct

private

public

internal

private

//因为结构不能派生,所以结构中成员没有protected 和protected internal可访问性级别

嵌套类型的可访问性取决于它的可访问域,该域是由已声明的成员可访问性和直接包含类型的可访问域这二者共同确定的。但是,嵌套类型的可访问域不能超出包含它的类型的可访问域。

三,可访问域

成员的可访问域指定程序段中可以引用成员的位置。如果成员嵌套在其他类型中,其可访问域由该成员的可访问性级别和直接包含类型的可访问域共同确定。

顶级类型的可访问域至少是声明它的项目的程序文本,即该项目的整个源文件。嵌套类型的可访问域至少是声明它的类型的程序文本,即包括任何嵌套类型的类型体。嵌套类型的可访问域决不能超出包含类型的可访问域。这些概念在以下示例中加以说明。

四,可访问性级别的使用限制

声明类型时,最重要的是查看该类型是否必须至少与其他成员或类型具有同样的可访问性。例如,直接基类必须至少与派生类具有同样的可访问性。以下声明将导致编译器错误,因为基类 BaseClass 的可访问性小于 MyClass:

class BaseClass {...}  public class MyClass: BaseClass {...} // Error

下表汇总了对使用声明的可访问性级别的限制。

上下文备注

类类型的直接基类必须至少与类类型本身具有同样的可访问性。

接口

接口类型的显式基接口必须至少与接口类型本身具有同样的可访问性。

委托

委托类型的返回类型和参数类型必须至少与委托类型本身具有同样的可访问性。

常数

常数的类型必须至少与常数本身具有同样的可访问性。

字段

字段的类型必须至少与字段本身具有同样的可访问性。

方法

方法的返回类型和参数类型必须至少与方法本身具有同样的可访问性。

属性

属性的类型必须至少与属性本身具有同样的可访问性。

事件

事件的类型必须至少与事件本身具有同样的可访问性。

索引器

索引器的类型和参数类型必须至少与索引器本身具有同样的可访问性。

运算符

运算符的返回类型和参数类型必须至少与运算符本身具有同样的可访问性。

构造函数

构造函数的参数类型必须至少与构造函数本身具有同样的可访问性。