原文地址:http://www.dingos.cn/index.php?topic=863.0
【访问修饰符】
可以限制类和结构,以便只有声明它们的程序或命名空间才能使用它们。可以限制类成员,以便只有派生类才能使用它们,或者限制类成员,以便只有当前命名空间或程序中的类才能使用它们。访问修饰符是添加到类、结构或成员声明的关键字,用以指定这些限制。
这些关键字包括
- public
是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别。对访问公共成员没有限制 - private
一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的
同一体中的嵌套类型也可以访问那些私有成员。在定义私有成员的类或结构外引用它会导致编译时错误。 - protected
是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。
只有在通过派生类类型发生访问时,基类的受保护成员在派生类中才是可访问的。 - internal
是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。
使用这些访问修饰符可指定下列五个可访问性级别:
- public:访问不受限制。
- protected:访问仅限于包含类或从包含类派生的类型。
- Internal:访问仅限于当前程序集。
- protected internal:访问仅限于当前程序集或从包含类派生的类型。
- private:访问仅限于包含类型。
【可访问性级别】
一个成员或类型只能有一个访问修饰符,但使用 protected internal 组合时除外。
命名空间上不允许使用访问修饰符。命名空间没有访问限制。
根据出现成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。
不嵌套在其他类型中的顶级类型的可访问性只能是 internal 或 public。这些类型的默认可访问性是 internal。
嵌套类型是其他类型的成员,它们可以具有下表所示的声明的可访问性。
属于
|
默认的成员可访问性
|
该成员允许的声明的可访问性
|
enum | public | 无 |
class | private | public protected internal private protected internal |
interface | public | 无 |
struct | private | public internal private |
【类和结构的可访问性】
没有嵌套在其他类或结构中的类和结构可以是公共的,也可以是内部的。声明为公共的类型可由任何其他类型访问。声明为内部的类型只能由同一程序集中的类型访问。默认情况下,类和结构声明为内部的,除非向类定义添加了关键字 public,如前面的示例所示。类或结构定义可以添加 internal 关键字,使其访问级别成为显式的。访问修饰符不影响类或结构自身;它始终能够访问自身及其所有成员。
【类成员和结构成员的可访问性】
可以使用五种访问类型之一来声明类成员或结构成员。就像类和结构自身一样,它们也可以是公共的或内部的。如果使用 protected 关键字将类成员声明为受保护的,则只有使用该类作为基类的派生类型才能访问该成员。通过组合 protected 和 internal 关键字,可以将类成员标记为 protected internal;只有派生类型或同一程序集中的类型才能访问该成员。
最后,可以使用 private 关键字将类成员或结构成员声明为私有的,指示只有声明该成员的类或结构才能访问该成员。
注意:protected internal 可访问性的意思是受保护“或”内部,而不是受保护“和”内部。换句话说,可以从同一程序集内的任何类(包括派生类)中访问 protected internal 成员。若要限制为只有同一程序集内的派生类可以访问,请将类本身声明为内部,并将其成员声明为受保护。
【其他类型】
接口也声明为公共类型或内部类型。接口默认具有内部访问级别。接口成员始终是公共的,不能应用任何访问修饰符。
命名空间和枚举成员始终是公共的,不能应用任何访问修饰符。
默认情况下,委托默认具有内部访问级别。
默认情况下,在命名空间中或在编译单元顶部声明的任何类型都是内部的,但是可以成为公共的