C# 编程指南——类和结构及其成员的可访问性

1.访问修饰符

访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。

public, protected, internal, private.

可以限制类和结构,以便只有声明它们的程序或命名空间才能使用它们。可以限制类成员,以便只有派生类才能使用它们,或者限制类成员,以便只有当前命名空间或程序中的类才能使用它们。访问修饰符是添加到类、结构或成员声明的关键字,用以指定这些限制。

2.可访问性级别

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

声明的可访问性

含义

public

访问不受限制。

protected

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

internal

访问仅限于当前程序集。

protected internal

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

private

访问仅限于包含类型。

类和结构的可访问性

类和结构的可访问性可以分为两种类型:
没有嵌套的类和结构:public、internal。默认情况下为internal。
嵌套的类和结构:可以使用五中访问类型。默认情况下为private。
访问修饰符不影响类或结构自身;它始终能够访问自身及其所有成员。

类成员和结构成员的可访问性

结构成员无法受保护,因为无法继承结构
通过组合 protected internal 关键字,可以将类成员标记为 protected internal;只有派生类型或同一程序集中的类型才能访问该成员。
注意:

protected internal 可访问性的意思是受保护“”内部,而不是受保护“和”内部。换句话说,可以从同一程序集内的任何类(包括派生类)中访问 

protected internal 成员。若要限制为只有同一程序集内的派生类可以访问,请将类本身声明为内部,并将其成员声明为受保护


其他类型

就像类一样,接口也可声明为公共类型或内部类型。与类不同,接口默认具有内部访问级别。接口成员始终是公共的,不能应用任何访问修饰符。

命名空间和枚举成员始终是公共的,不能应用任何访问修饰符。

默认情况下,委托默认具有内部访问级别。

默认情况下,在命名空间中或在编译单元顶部(例如,不在命名空间、类或结构中)声明的任何类型都是内部的,但是可以成为公共的。


  • 一个成员或类型只能有一个访问修饰符,但使用 protected internal 组合时除外。
  • 命名空间上不允许使用访问修饰符。命名空间没有访问限制。
  • 根据出现成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。
  • 不嵌套在其他类型中的顶级类型的可访问性只能是 internalpublic这些类型的默认可访问性是internal
  • 嵌套类型是其他类型的成员,它们可以具有下表所示的声明的可访问性。

属于

默认的成员可访问性

该成员允许的声明的可访问性

enum

public

class

private

public

protected

internal

private

protected internal

interface

public

struct

private

public

internal

private

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

3.可访问性级别的使用限制

声明类型时,请确保查看该类型是否必须至少具有与另一个成员或类型相同的可访问性。例如,直接基类必须至少与派生类具有同样的可访问性。

4.可访问域

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

顶级类型的可访问域至少是声明此类型的项目的程序文本。也就是说,域包括此项目的所有源文件。嵌套类型的可访问域至少是声明它的类型的程序文本,即域是一个类型体,包括所有嵌套的类型。嵌套类型的可访问域决不能超出包含类型的可访问域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值