转自:http://msdn.microsoft.com/zh-cn/library/ms173121.aspx
访问修饰符(C# 编程指南)
所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们。 可使用一下访问修饰符指定声明类型或成员时类型或成员的可访问性。
下面的示例演示如何为类型和成员指定访问修饰符:
public class Bicycle { public void Pedal() { } }
不是所有访问修饰符都可以在所有上下文中由所有类型或成员使用,在某些情况下类型成员的可访问性受到其包含类型的可访问性的限制。 以下各节提供了有关可访问性的更多详细信息。
直接在命名空间中声明的类和结构(即,没有嵌套在其他类或结构中的类和结构)可以是公共类和结构,也可以是内部类和结构。 如果不指定访问修饰符,则默认为 internal。
结构成员,包括嵌套的类和结构,可以声明为公共的、 内部的,或私人的。 类成员(包括嵌套的类和结构)可以为公共的、受保护的内部、受保护的、内部的或私有的。 类成员和结构成员的访问级别,包括嵌套类和结构,默认为私有。 不可以从包含类型之外访问私有嵌套类型。
派生类的可访问性不能高于其基类型。 换句话说,不能有从内部类 A 派生的公共类 B。 如果允许这种情况,将会使 A 成为公共类,因为 A 的所有受保护的成员或内部成员都可以从派生类访问。
可以使用 InternalsVisibleToAttribute 使其他某些程序集能够访问您的内部类型。 有关更多信息,请参见友元程序集(C# 和 Visual Basic)。
可以使用五种访问类型中的任何一种来声明类成员(包括嵌套的类和结构)。 结构成员无法声明为受保护成员,因为结构不支持继承。
通常,成员的可访问性低于包含成员的类型的可访问性。 如果由成员实现接口方法或重写已在公共基类中定义的虚拟方法时,内部类的公共成员可以从外部程序集访问。
任何成员的字段、 属性或事件的类型必须至少与该成员本身一样具备可访问性。 同样,作为方法、索引器或代表的任一成员的返回类型和参数类型必须至少有与该成员本身一样的可访问性。 例如,如果 C 不是公共类,则不能返回类 C 的公共方法 M。 同样,如果 A 声明为私有,则类型 A 不能有受保护的属性。
用户定义的运算符必须始终声明为公共运算符。 有关更多信息,请参见 运算符(C# 参考)。
析构函数不能具有可访问性修饰符。
要设置类成员或结构成员的访问级别,请向该成员声明添加适当的关键字,如下面的示例所示。
// public class: public class Tricycle { // protected method: protected void Pedal() { } // private field: private int wheels = 3; // protected internal property: protected internal int Wheels { get { return wheels; } } }
![]() |
---|
受保护内部可访问性级别的意思是受保护“或”内部,而不是受保护“和”内部。 换句话说,可以从同一程序集内的任何类(包括派生类)中访问受保护的内部成员。 若要限制为只有同一程序集内的派生类可以访问,请将类本身声明为内部,并将其成员声明为受保护。 |