最近一个项目编译遇到一个问题:无法访问一个接口。查看代码发现该接口定义时没有显示修饰符,加上public编译通过玩。网上查一下复习基础,亲自验证:定义一个类,且修饰符为praivate或protected
private class TestAccess
{
}
编译报错:在命名空间中定义的元素无法显示的声明为 private, protected, protected internal
访问修饰符共5类:public-公共,internal - 内部的,private - 私有的, protected - 受保护的, protected internal。能在
命名空间中定义的元素有:类(class),结构(struct),委托(delegate),接口(interface),枚举(enum)。
1.命名空间下的元素的默认访问修饰符
命名空间下的元素的默认访问修饰符internal,且命名空间下只能使用两种访问修饰符public和internal
public : (访问不受限制) 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员。
internal : (访问仅限于当前程序集) 同一程序集中的任何代码都可以访问该类型或成员,但其他程序集不可以访问。
2.各类型中的成员的默认访问修饰符
剩下的修饰符主要是正对继承这个语言特性的,拥有继承的类型有两个类(class)和接口(interface)。public,internal同样可以用于类型成员。
private : (访问仅限于当前所在的类) 同一类和结构的代码可以访问该类型和成员。
protected : (访问仅限于当前所在的类或从包含类派生的类) 同一类和派生(继承特性)类中的代码可以访问该类型和成员。
protected internal : (访问仅限于从包含类派生的当前程序集或类) 同一程序集中的任何代码或其他程序集任何派生类
可以访问该类型或成员。
接口(interface)
接口成员访问修饰符默认为public,且不能显示使用访问修饰符。
类(class)
构造函数默认为public访问修饰符。
析构函数不能显示使用访问修饰符且默认为private访问修饰符。
类的成员默认访问修饰符为private;
枚举(enum)
枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。
结构(struct)
结构成员默认为private修饰符。
结构成员无法声明为protected成员,因为结构不支持继承。
嵌套类型
嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致。
嵌套类型的可访问性取决于它的可访问域,该域是由已声明的成员可访问性和直接包含类型的可访问域这二者共同确定的。
但是,嵌套类型的可访问域不能超出包含它的类型的可访问域。