---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
今天被问到访问修饰符,转篇帖子,常回顾下:
一个编译器错误提示:在命名空间中定义的元素无法显示的声明为 private, protected, protected internal。
能在命名空间中定义的元素有:类(class),结构(struct),委托(delegate),接口(interface),枚举(enum)
MSDN提示: protected internal 可访问性的意思是受保护“或”内部,而不是受保护“和”内部。
我们的访问修饰符一共有5个级别
public - 公共的,
internal - 内部的,
private - 私有的,
protected - 受保护的,
protected internal
1.命名空间下的元素的默认访问修饰符
根据上面的红色错误提示,可以知道命名空间下只能使用两种访问修饰符public和internal。如果没有显示的给这些元素访问修饰符,其修饰符默认为internal。
public : (访问不受限制) 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员。
internal : (访问仅限于当前程序集) 同一程序集中的任何代码都可以访问该类型或成员,但其他程序集不可以访问。
2.各类型中的成员的默认访问修饰符
剩下的修饰符主要是正对继承这个语言特性的,拥有继承的类型有两个类(class)和接口(interface)。public,internal同样可以用于类型成员。
private : (访问仅限于当前所在的类) 同一类和结构的代码可以访问该类型和成员。
protected : (访问仅限于当前所在的类或从包含类派生的类) 同一类和派生(继承特性)类中的代码可以访问该类型和成员。
protected internal : (访问仅限于从包含类派生的当前程序集或类) 同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。
MSDN提示 :
1.) 派生类的可访问性不能高于其基类型。换句话说,不能有从内部类 A 派生的公共类 B。如果允许这种情况,将会使 A 成为公共类,因为 A 的所有受保护的成员或内部成员都可以从派生类访问。
2.) 成员的可访问性决不能高于其包含类型的可访问性。
3.) 可以使用五种访问类型中的任何一种来声明类成员(包括嵌套的类和结构)。
接口(interface)
接口成员访问修饰符默认为public,且不能显示使用访问修饰符。
类(class)
构造函数默认为public访问修饰符。
析构函数不能显示使用访问修饰符且默认为private访问修饰符。
类的成员默认访问修饰符为private;
枚举(enum)
枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。
结构(struct)
结构成员默认为private修饰符。
结构成员无法声明为protected成员,因为结构不支持继承。
嵌套类型
嵌套类型的默认访问修饰符为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
嵌套类型的可访问性取决于它的可访问域,该域是由已声明的成员可访问性和直接包含类型的可访问域这二者共同确定的。但是,嵌套类型的可访问域不能超出包含它的类型的可访问域。
成员的可访问域指定程序段中可以引用成员的位置。如果成员嵌套在其他类型中,其可访问域由该成员的可访问性级别和直接包含类型的可访问域共同确定。
顶级类型的可访问域至少是声明它的项目的程序文本,即该项目的整个源文件。嵌套类型的可访问域至少是声明它的类型的程序文本,即包括任何嵌套类型的类型体。嵌套类型的可访问域决不能超出包含类型的可访问域。这些概念在以下示例中加以说明。
转自:http://blog.163.com/hweibin126@126/blog/static/170442469201010114348166/
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://net.itheima.com/