zoukankan      html  css  js  c++  java
  • C#中五种访问修饰符作用范围 public、private、protected、internal、protected internal

    1.五种访问修饰符包括哪些?

    public、private、protected、internal、protected internal


    2.五种访问修饰符的作用范围?

    public  :公有访问。不受任何限制。
    private  : 私有访问。只限于本类成员访问,子类,实例都不能访问。
    protected  :保护访问。只限于本类和子类访问,实例不能访问。
    internal  :内部访问。只限于本项目内访问,其他不能访问。
    protected internal : 内部保护访问。只限于本项目或是子类访问,其他不能访问


    实例讲解一下这五种访问修饰符的作用范围:

    基础代码:

      1     class BaseClass
      2     {
      3         public string GetaPublicString()
      4         {
      5             return "Public String";
      6         }
      7 
      8         protected string GetaProtectedString()
      9         {
     10             return "Protected String";
     11         }
     12 
     13         private string GetaPrivateString()
     14         {
     15             return "Private String";
     16         }
     17 
     18         internal string GetaInternalString()
     19         {
     20             return "Internal String";
     21         }
     22 
     23         protected internal string GetaProtectedInternalString()
     24         {
     25             return "Protected Internal String";
     26         }
     27         public void Test()
     28         {
     29 
     30         }
     31 
     32     }
    View Code

    测试private作用范围:

    本类中:

    image

    图1

    结论:在BaseClass类中,在方法Test()中,可以调用私有方法GetaPrivateString()

    子类中:

    image

    图2

    结论:在AClass中,只继承了父类,在方法Test2()中,调用父类的方法,没有GetaPrivateString(),说明子类没法调用私有方法

    实例中:

    image

    图3

    结论:在Main方法中new了一个BaseClass实例,对象调用没有GetaPrivateString(),说明实例没法调用私有方法

    ----------------------------------------------------------------------------------------------------------------------------------

    测试protected作用范围:

    本类中:

    看图1

    结论:在BaseClass类中,在方法Test()中,可以调用方法GetaProtectedString()

    子类中(一):

    看图2

    结论:在AClass中,只继承了父类,在方法Test2()中,调用父类的方法,有GetaProtectedString(),说明子类可以调用GetaProtectedString()方法

    子类中(二):

    新建一个项目,并引用之前的项目,创建子类BClass并继承父类:

    image

    图4

    结论:子类和父类不在同一个程序集内,但是子类可以调用GetaProtectedString(),说明虽然不在一个程序集内,但是依然可以调用GetaProtectedString()方法


    实例中:

    看图3

    结论:在Main方法中new了一个BaseClass实例,对象调用没有GetaProtectedString(),说明实例没法调用GetaProtectedString()方法

    -------------------------------------------------------------------------------------------------------------------------------------

    测试Internal作用范围:

    通过以上图1,图2,图3,可以看出来在本类中,子类中,实例中都可以调用GetaInternalString()方法。

    通过图4,可以看出来,不在同一个程序集内,不可以调用GetaInternalString()方法。

    新建一个项目,并引用之前的项目:

    image

    图5

    结论:在新实例的方法中,new了一个BaseClass实例,对象调用没有GetaInternalString(),说明实例没法调用GetaInternalString()方法

    ------------------------------------------------------------------------------------------------------------------------------------

    测试protected  Internal作用范围:

    通过以上图1,图2,图3,可以看出来在本类中,子类中,实例中都可以调用GetaProtectedInternalString()方法。

    通过图4,可以看出来,不在同一个程序集内,可以调用GetaProtectedInternalString()方法。

    通过图5,可以看出来,不在同一个程序集内,new了一个BaseClass实例,对象调用没有GetaProtectedInternalString(),说明实例没法调用GetaProtectedInternalString()方法

    -----------------------------------------------------------------------------------------------------------------------------------

    测试public作用范围:

    通过以上图例,所有情况都可以调用GetaPublicString()方法。

  • 相关阅读:
    Keep it simple & stupid
    BZOJ 2631: tree( LCT )
    BZOJ 2843: 极地旅行社( LCT )
    BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊( LCT )
    BZOJ 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草( dp )
    BZOJ 3531: [Sdoi2014]旅行( 树链剖分 )
    BZOJ 1269: [AHOI2006]文本编辑器editor( splay )
    BZOJ 2016: [Usaco2010]Chocolate Eating( 二分答案 )
    BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )
    BZOJ 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱( dp )
  • 原文地址:https://www.cnblogs.com/yangxi1081/p/9437716.html
Copyright © 2011-2022 走看看