zoukankan      html  css  js  c++  java
  • 访问修饰符的个人理解-private与protected

                                一:private
                               
    private --只有在声明它的类或结构中访问.
    例:
    public class A
    {
      private string name="xu";
      int age="23";  //默认为private
    }
    这时就不能在A的外部直接读取name和age的值,只有通过A类中的方法或属性完成。完整示例:
    public class A
    {
      private string name="xu";
      int age="23";  //默认为private
      public string GetName()  //这时的属性或方法就不能再声明为private 或protected了,这样会导致在外部同样不能访问。
      {
      return name;
      }
      public int Age
      {
      get { retunr age;}
      }
    }
    public class B
    {
       public B()
       {
         A a1=new A();
         //string x=a1.name;  这样就不能访问A的name了
         string x=a1.GetName() ; //通过方法来访问。
         //int age=a1.age;    can not do this;
         int age=a1.Age; //通过属性来访问
       }
    }
                                       二 protected
    protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。
    个人理解为:受保护成员只能在声明它的类中访问(如同private一样)或者通过它的派生类来访问。
    如下例:
    using System;
    class A
    {
        protected int x = 123;
        public int X{get return x;}
    }

    class B : A
    {
        static void Main()
        {
            A a = new A();
            B b = new B();

            // Error CS1540, because x can only be accessed by
            // classes derived from A.
            // a.x = 10;
            // a.X;----这样就可以读取
           
            // OK, because this class derives from A.
            b.x = 10;  
        }
    }
    分析:
    一:当使用a.x=10时,由于A是基类,因此其下的private x不能外部访问,此时用a.x=10就会报错。
    二:为什么用b.x=10就可以呢,这也是外部呀? ^_^:因此,此时,类B是类A的派生类,protected 修饰的如果在派生类中就可以访问。
    总结:protected类型的,在外部而非派生类中访问时除非通过方法或属性,否则不可以访问。而在派生类中就可以访问。
          private类型的,除非通过方法或属性,否则不可以在外部访问。
         
         
          属于  默认的成员可访问性  该成员允许的声明的可访问性 
    enum  public   无
     
    class  private  < public protected internal private protected internal >
     
    interface  public  无
     
    struct  private  <public internal private >
     

  • 相关阅读:
    PHPUnit
    变长参数处理
    springMVC课程笔记(二)springMVC组件配置
    URL编码以及GET和POST提交乱码解决方案
    springMVC课程笔记(一)springMVC架构原理分析
    ELK(ElasticSearch, Logstash, Kibana) 实现 Java 分布式系统日志分析架构
    Java 标准 IO 流编程一览笔录( 下 )
    Java 标准 IO 流编程一览笔录( 上 )
    Zookeeper系列(十四)Zookeeper的数据与存储
    Zookeeper系列(十三)Zookeeper的请求处理
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1200843.html
Copyright © 2011-2022 走看看