C#中的一些访问修饰符

public :访问不受限制。

 1 class PointTest
 2 {
 3     public int x; 
 4     public int y;
 5 }
 6 
 7 class MainClass4
 8 {
 9     static void Main() 
10     {
11         PointTest p = new PointTest();
12         // Direct access to public members:
13         p.x = 10;
14         p.y = 15;
15         Console.WriteLine("x = {0}, y = {1}", p.x, p.y); 
16     }
17 }
18 // Output: x = 10, y = 15
View Code

protected :访问仅限于包含类或从包含类派生的类型。

 1 //只有在通过派生类类型发生访问时,基类的受保护成员在派生类中才是可访问的。
 2 class A
 3 {
 4     protected int x = 123;
 5 }
 6 
 7 class B : A
 8 {
 9     static void Main()
10     {
11         A a = new A();
12         B b = new B();
13 
14         // Error CS1540, because x can only be accessed by 
15         // classes derived from A. 
16         // a.x = 10;  
17 
18         // OK, because this class derives from A.
19         b.x = 10;
20     }
21 }
View Code

Internal :访问仅于当前程序集。

 1 //示例包含两个文件:Assembly1.cs 和 Assembly1_a.cs。 第一个文件包含内部基类 BaseClass。 在第二个文件中,实例化 BaseClass 的尝试将产生错误。
 2 // Assembly1.cs
 3 // Compile with: /target:library
 4 internal class BaseClass 
 5 {
 6    public static int intM = 0;
 7 }
 8 -------------------------------------------------------------------
 9 // Assembly1_a.cs
10 // Compile with: /reference:Assembly1.dll
11 class TestAccess 
12 {
13    static void Main() 
14    {
15       BaseClass myBase = new BaseClass();   // CS0122
16    }
17 }
View Code
 1 使用与示例 1 中所用的文件相同的文件,并将 BaseClass 的可访问性级别更改为 public。 还将成员 IntM 的可访问性级别更改为 internal。 在此例中,可以实例化类,但不能访问内部成员。
 2 // Assembly2.cs
 3 // Compile with: /target:library
 4 public class BaseClass 
 5 {
 6    internal static int intM = 0;
 7 }
 8 ------------------------------------------------
 9 // Assembly2_a.cs
10 // Compile with: /reference:Assembly1.dll
11 public class TestAccess 
12 {
13    static void Main() 
14    {
15       BaseClass myBase = new BaseClass();   // Ok.
16       BaseClass.intM = 444;    // CS0117
17    }
18 }
View Code

protected internal:访问限制到当前程序集或从包含派生的类型的类别。(从当前程序集或从包含类派生的类型,可以访问具有访问修饰符 protected internal 的类型或成员。

private :访问仅限于包含类型,是一个成员访问修饰符。 私有访问是允许的最低访问级别。 私有成员只有在声明它们的类和结构体中才是可访问的。

 1 //Employee 类包含两个私有数据成员 name 和 salary。 作为私有成员,它们只能通过成员方法来访问。 添加名为 GetName 和 Salary 的公共方法,以便可以对私有成员进行受控/   //的访   问。 通过公共方法访问 name 成员,而通过公共只读属性访问salary 成员。
 2 class Employee2
 3 {
 4     private string name = "FirstName, LastName";
 5     private double salary = 100.0;
 6 
 7     public string GetName()
 8     {
 9         return name;
10     }
11 
12     public double Salary
13     {
14         get { return salary; }
15     }
16 }
17 
18 class PrivateTest
19 {
20     static void Main()
21     {
22         Employee2 e = new Employee2();
23 
24         // The data members are inaccessible (private), so 
25         // they can't be accessed like this: 
26         //    string n = e.name; 
27         //    double s = e.salary; 
28 
29         // 'name' is indirectly accessed via method: 
30         string n = e.GetName();
31 
32         // 'salary' is indirectly accessed via property 
33         double s = e.Salary;
34     }
35 }
View Code

 

posted @ 2015-06-19 00:26  紫系流月  阅读(185)  评论(0编辑  收藏  举报