[C#] - C#中类的可访问修饰符(转http://hi.baidu.com/ztf704/blog/item/6050aaaf013482cf7dd92a36.html)
2010-03-14 17:26
316 查看
C#中类的可访问修饰符
访问修饰符 | 定义 | 备注 | 例子 | 测试总结 |
new | 仅允许在嵌套类声明时使用,表明类中隐藏了由基类中继承而来的,与基类中同名的成员。 | 只能用于嵌套的类,表示对继承父类同名类型的隐藏。 | private class ClassA { } } public class ClassB{ public class ClassC{ Form1.ClassA ca = new Form1.ClassA(); //错误 ClassB cb = new ClassB(); //正确 } } | 可以在任何嵌套类声明中使用,但其父类的可访问性不可低于基类,否则报错:找不到类型或命名空间名称"A"(是否缺少using指令或程序集引用?) |
public | 表示不限制对该类的访问;可以被任意存取 | 命名空间或编译单元内的类只有public和internal两种修饰符。派生类为public类,其基类为protected,internal, private,abstract | internal class ClassA{ //protected class ClassA{ public class ClassB { } } } public class ClassC{ Form1.ClassA ca = new Form1.ClassA(); Form1.ClassA.ClassB cb = new Form1.ClassA.ClassB(); } | 但是如果public类为嵌套中的类(如ClassB),且其外在类的可访问性为protected,private,abstract,sealed,则不能访问(因嵌套类作为外在类的内部成员,在访问类中不能访问到),但如果外在类的可访问性为internal,则可以访问(因嵌套类作为外在类的内部成员,在访问类中可以访问到)。 |
protected | 表示只能从所在类和所在类派生的子类进行访问 | 只可以被本类和其继承子类存取 | protected class ClassA { protected class ClassB { } ClassB cb = new ClassB();//正确,在ClassB所在类内访问 } //ClassB cb = new ClassB();//错误,不在ClassB所在类内访问 } public class ClassC:Form1 { ClassA ca = new ClassA(); //正确,在ClassA所在类的继承子类中访问 //ClassA.ClassB cb = new ClassA.ClassB(); //错误,不在ClassB所在类的继承子类中访问 } | 限定的是只有在同一程序集中才可以访问,可以跨程序集 |
internal | 只有其所在类才能访问 | 默认为internal;只可以被本组合体(Assembly)内所有的类存取,组合体是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往是“.DLL”或“.EXE”。 | internal class ClassA{ internal class ClassB { } } //} //错误 访问类不在internal所在类Form1中 public class ClassC{ ClassA ca = new ClassA(); ClassA.ClassB cb = new ClassA.ClassB(); } } //正确 | 限定得是只有在同一个程序集中才可以访问,可以跨类。在namespace空间下类默认的修饰符为internal,但当嵌套类作为类的内部成员,则嵌套类默认的修饰符为private |
private | 只有对包.net中的应用程序或库才能访问 | 只可以被本类所存取。包是由.class文件组成的一个集合,.class文件是可以用java解释器编译执行的文件,它也是由java的源文件即.java经编译而生成的。 | private class ClassA { private class ClassB { } } private class ClassC{ ClassA ca = new ClassA(); //正确 //ClassA.ClassB cb = new ClassA.ClassB(); //错误 } | 只能被和private类在同一所在类的类访问 |
abstract | 抽象类,表示该类只能作为父类被用于继承,而不能进行对象实例化。抽象类可以包含抽象的成员,但这并非必须。 | Abstract不能和new同时用 | abstract class A { public abstract void F(); } abstract class B : A{ public void G() { } } class C : B{ public override void F(){ } } | 类继承时,如果基类的可访问性比派生类的可访问性低,则不可以继承(报错),例子: private class C { } protected class D:C {} |
sealed | 密封类,不允许被继承。同时对一个类作abstract和sealed的修饰是没有意义的,也是被禁止的。 | 密封类可以阻止其他程序员在无意中继承该类,而且密封类可以起到运行时优化的效果。实际上,密封类中不可能有派生类,如果密封类实例中存在虚成员函数,改成员函数可以转化为非虚的,函数修饰符virtual不再生效。 | sealed class A {} class C : A {} |
相关文章推荐
- 本地运行FlashPlayer访问本地文件的设置 / 本地运行flash不能正常显示问题(转http://hi.baidu.com/slzs_zyt/blog/item/c8a40697aa45ac6354fb9630.html)
- C# 使用 GetOleDbSchemaTable 检索架构信息(表、列、主键等)--链接http://hi.baidu.com/useforprograms/blog/item/b2627decd024074778f05587.html
- C# 静态构造函数详解(转自:http://hi.baidu.com/jiang_yy_jiang/blog/item/07d5cbe9ff6b4d32b90e2d5a.html)
- asp.net中前台javascript与c#函数相互调方法(http://hi.baidu.com/tracyjay/blog/item/fac2063700b0ea45241f14c2.html)
- C#读取配置文件详解:转自(http://hi.baidu.com/huahua382811/blog/item/27d43cef3bd587f7b3fb956d.html)
- asp.net中前台javascript与c#函数相互调方法(http://hi.baidu.com/tracyjay/blog/item/fac2063700b0ea45241f14c2.html)
- window下注册服务的命令(转自:http://hi.baidu.com/lijunliang/blog/item/cca6fb19179d306cdbb4bdf7.html)
- 我的所有文章在此处,欢迎大家访问!http://hi.baidu.com/www_likede_com
- C#封装、访问修饰符
- C#访问修饰符——public ,private , internal ,protected和protected internal
- C# 访问修饰符internal的访问范围误区释疑
- C#中有关的访问修饰符
- 解决:无法连接到 WMI 提供程序。您没有权限或者该服务器无法访问。 (转帖:http://www.cnblogs.com/furenjun/archive/2011/09/01/2161873.html)
- delphi http://hi.baidu.com/wqyfavor/blog/item/6b60340227c616e509fa9361.html
- C#中方法、类等的默认访问修饰符
- Swagger使用及Springfox+SpringBoot访问http://localhost:8080/swagger-ui.htmlui404
- c#访问http接口的"编码"问题
- 必须掌握的八个cmd 命令行(转http://hi.baidu.com/chenleibupt/blog/item/d7006f861762663b66096e27.html)
- sendmessage 参数(原文地址:http://hi.baidu.com/myvfp/blog/item/5f87ad7af857c8e92f73b3ec.html)
- C#中访问修饰符的权限