今天想整理一下访问修饰符,当然对老鸟来说不用介绍了,但是我相信对新人来说一定有必要说一下,所以在网上查了一下,没有一个完整的介绍,除了概念就是概念,老鸟看了那些文字都要头疼,所以决定今天整理出来用例子说明来为大家解释一下吧:首先介绍一下类的修饰符作为一个顶级类(即不是内部类)只能使用public和internal两种访问修饰符,它们的意义如下。— public:所修饰的顶级类的可访问域是它所在的程序和任何引用该程序的程序,因此访问不受限制。— internal:所修饰的顶级类的可访问域是定义它的程序。public不必介绍哪都可以new一下,但是internal必须在自己的项目内使用,这里有必要向大家介绍项目和程序集,简单点项目包括:
控制台应用程序,Windows应用程序,类库(Class Library)等,而程序集叫Assembly(也就是我们创建项目中的AssemblyInfo.cs文件),一个项目也就是一个程序集,Assembly用处很大,但与我们的专题无关,不做介绍。
介绍上面的目的为了说明,一个项目的internal无法在另一个项目中调用,代码:
| 以下是引用片段: class1:using System;using System.Collections.Generic;using System.Text;namespace xiaolei{ //public class Class1 //{ //public int aa; //} internal class Class1 { public int aa; } class Class11 { public void bb() { Class1 cc = new Class1(); } } } class2:using System;using System.Collections.Generic;using System.Text;namespace fanxing{ class Application1 { static void Main(string[] args) { xiaolei.Class1 aaa = new xiaolei.Class1(); System.Console.Read(); } } } |
但是在class11中可以得到。
很简单,接下来我们介绍方法或者属性的修饰符:
概念性的东西拿来用下:
|
访问修饰符 |
意 义 |
|
public |
访问不受限制,可以类内和任何类外的代码中访问 |
|
protected |
可访问域限定于类内或从该类派生的类内 |
|
internal |
可访问域限定于类所在的程序内 |
|
protected internal |
protected或者internal,即可访问域限定于类所在的程序或那些由它所属的类派生的类内 |
|
private |
可访问域限定于它所属的类内 |
如果在同一程序集里面,不是子类的话,仅仅实例化该类,其中的protected所修饰的成员就不能被访问
| 以下是引用片段: using System;using System.Collections.Generic;using System.Text;namespace aaa{ public class Class2 { protected int bb; public int cc; } public class class22 { protected void bbb() { Class2 bbbb=new Class2(); //只能得到bbbb.cc } } public class class33:Class2 { public void bbb() { //可得到base.bb,base.cc } } } |
| 以下是引用片段: using System;using System.Collections.Generic;using System.Text;namespace fanxing{ class Application1:aaa.Class2 { public void aaa() { //base.bb; base.cc; } static void Main(string[] args) { aaa.Class2 bbb = new aaa.Class2(); //bbb.cc; System.Console.Read(); } } } |
private也很简单,只能在定义的类内部使用,别处不管是派生类等都不能使用。
internal和我们解释的类的修饰符一样,只能在一个项目中使用(不管是实例化还是派生均可见),在别的项目中看不到
| 以下是引用片段: using System;using System.Collections.Generic;using System.Text;namespace aaa{ public class Class2 { internal int bb; public int cc; } public class class22 { internal void bbb() { Class2 bbbb=new Class2(); //bbbb.bb;bbbb.cc; } } public class class33:Class2 { public void bbb() { //base.bb;base.cc; } } } |
| 以下是引用片段: using System;using System.Collections.Generic;using System.Text;namespace fanxing{ class Application1:aaa.Class2 { public void aaa() { //base.cc; } } class bbb { public void ccc() { aaa.Class2 ddd = new aaa.Class2(); //ddd.cc; } } } |
最后我们讲protected internal,看了大家也应该明白
protected internal是protected和interval的集合体,确切的说应该是一个并集,意义就是它能被类的子类所访问并且(不管这个子类在哪个程序集里)即protected的实现部分,并且能被同一个程序集的类所访问即internal的实现部分
| 以下是引用片段: using System;using System.Collections.Generic;using System.Text;namespace aaa{ public class Class2 { internal protected int aa; internal int bb; protected int cc; } public class class22 { public void bbb() { Class2 bbbb=new Class2(); //bbbb.aa;bbbb.bb } } public class class33:Class2 { public void bbb() { //base.aa; base.bb; base.cc; } } } |
| 以下是引用片段: using System;using System.Collections.Generic;using System.Text;namespace fanxing{ class Application1:aaa.Class2 { public void aaa() { //base.aa;base.cc } } class bbb { public void ccc() { aaa.Class2 ddd = new aaa.Class2(); //ddd. } } } |
好了到此为止。
原文连接:http://blog.csdn.net/xiaolei1982/archive/2008/04/07/2257280.aspx