zoukankan      html  css  js  c++  java
  • c# public private protected internal protected internal

    一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:

    • public:所有对象都可以访问;
    • private:对象本身在对象内部可以访问;
    • protected:只有该类对象及其子类对象可以访问
    • internal:同一个程序集的对象可以访问;使用internal的类只能在同一个项目中使用,不能在别的项目中使用
    • protected internal:访问限于当前程序集或派生自包含类的类型。

    Public 访问修饰符

    Public 访问修饰符允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员可以被外部的类访问。

    下面的实例说明了这点:

    using System;
    
    namespace RectangleApplication
    {
        class Rectangle
        {
            //成员变量
            public double length;
            public double width;
    
            public double GetArea()
            {
                return length * width;
            }
            public void Display()
            {
                Console.WriteLine("长度: {0}", length);
                Console.WriteLine("宽度: {0}", width);
                Console.WriteLine("面积: {0}", GetArea());
            }
        }// Rectangle 结束
    
        class ExecuteRectangle
        {
            static void Main(string[] args)
            {
                Rectangle r = new Rectangle();
                r.length = 4.5;
            r.width = 3.5;
                r.Display();
                Console.ReadLine();
            }
        }
    }

    当上面的代码被编译和执行时,它会产生下列结果:

    长度: 4.5
    宽度: 3.5
    面积: 15.75


    在上面的实例中,成员变量 length 和 width 被声明为 public,所以它们可以被函数 Main() 使用 Rectangle 类的实例 r 访问。

    成员函数 Display() 和 GetArea() 可以直接访问这些变量。

    成员函数 Display() 也被声明为 public,所以它也能被 Main() 使用 Rectangle 类的实例 r 访问。

    Private 访问修饰符

    Private 访问修饰符允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。只有同一个类中的函数可以访问它的私有成员。即使是类的实例也不能访问它的私有成员。

    下面的实例说明了这点:

    using System;
    
    namespace RectangleApplication
    {
        class Rectangle
        {
            //成员变量
            private double length;
            private double width;
    
            public void Acceptdetails()
            {
                Console.WriteLine("请输入长度:");
                length = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("请输入宽度:");
                width = Convert.ToDouble(Console.ReadLine());
            }
            public double GetArea()
            {
                return length * width;
            }
            public void Display()
            {
                Console.WriteLine("长度: {0}", length);
                Console.WriteLine("宽度: {0}", width);
                Console.WriteLine("面积: {0}", GetArea());
            }
        }//end class Rectangle    
        class ExecuteRectangle
        {
            static void Main(string[] args)
            {
                Rectangle r = new Rectangle();
                r.Acceptdetails();
                r.Display();
                Console.ReadLine();
            }
        }
    }

    当上面的代码被编译和执行时,它会产生下列结果:

    请输入长度:
    4.4
    请输入宽度:
    3.3
    长度: 4.4
    宽度: 3.3
    面积: 14.52


    在上面的实例中,成员变量 length 和 width 被声明为 private,所以它们不能被函数 Main() 访问。

    成员函数 AcceptDetails() 和 Display() 可以访问这些变量。

    由于成员函数 AcceptDetails() 和 Display() 被声明为 public,所以它们可以被 Main() 使用 Rectangle 类的实例 r 访问。

    Protected 访问修饰符

    Protected 访问修饰符允许子类访问它的基类的成员变量和成员函数。这样有助于实现继承。

    Internal 访问修饰符

    Internal 访问说明符允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象。换句话说,带有 internal 访问修饰符的任何成员可以被定义在该成员所定义的应用程序内的任何类或方法访问。

    using System;
    
    namespace RectangleApplication
    {
        class Rectangle
        {
            //成员变量
            internal double length;
            internal double width;
            
            double GetArea()
            {
                return length * width;
            }
           public void Display()
            {
                Console.WriteLine("长度: {0}", length);
                Console.WriteLine("宽度: {0}", width);
                Console.WriteLine("面积: {0}", GetArea());
            }
        }//end class Rectangle    
        class ExecuteRectangle
        {
            static void Main(string[] args)
            {
                Rectangle r = new Rectangle();
                r.length = 4.5;
                r.width = 3.5;
                r.Display();
                Console.ReadLine();
            }
        }
    }

    当上面的代码被编译和执行时,它会产生下列结果:

    长度: 4.5
    宽度: 3.5
    面积: 15.75


    在上面的实例中,请注意成员函数 GetArea() 声明的时候不带有任何访问修饰符。如果没有指定访问修饰符,则使用类成员的默认访问修饰符,即为 private


    Protected Internal 访问修饰符

    
    

    Protected Internal 访问修饰符允许在本类,派生类或者包含该类的程序集中访问。这也被用于实现继承。

    直白解释:

    1. 比如说:一个人A为父类,他的儿子B,妻子C,私生子D(注:D不在他家里)

      如果我们给A的事情增加修饰符:

      •  public事件,地球人都知道,全公开
      •  protected事件,A,B,D知道(A和他的所有儿子知道,妻子C不知道)
      •  private事件,只有A知道(隐私?心事?)
      •  internal事件,A,B,C知道(A家里人都知道,私生子D不知道)
      •  protected internal事件,A,B,C,D都知道,其它人不知道

       

      •  (1) Pubilc :任何公有成员可以被外部的类访问。
      •  (2) Private :只有同一个类中的函数可以访问它的私有成员。
      •  (3) Protected :该类内部和继承类中可以访问。
      •  (4) internal : 同一个程序集的对象可以访问。
      •  (5) Protected internal :3 和 4 的并集,符合任意一条都可以访问。

      范围比较:

      private < internal/protected < protected internal < public
  • 相关阅读:
    一种集各种优点于一身的技术面试方式--转
    spring cloud集成 consul源码分析
    一篇文章全面了解监控知识体系--转
    使用CNN做电影评论的负面检测——本质上感觉和ngram或者LSTM同,因为CNN里图像检测卷积一般是3x3,而文本分类的话是直接是一维的3、4、5
    CNN tflearn处理mnist图像识别代码解说——conv_2d参数解释,整个网络的训练,主要就是为了学那个卷积核啊。
    神经网络中embedding层作用——本质就是word2vec,数据降维,同时可以很方便计算同义词(各个word之间的距离),底层实现是2-gram(词频)+神经网络
    使用LSTM做电影评论负面检测——使用朴素贝叶斯才51%,但是使用LSTM可以达到99%准确度
    如何比较Keras, TensorLayer, TFLearn ?——如果只是想玩玩深度学习,想快速上手 -- Keras 如果工作中需要解决内部问题,想快速见效果 -- TFLearn 或者 Tensorlayer 如果正式发布的产品和业务,自己设计网络模型,需要持续开发和维护 -- Tensorlayer
    TensorFlow高层次机器学习API (tf.contrib.learn)
    tensorflow LSTM
  • 原文地址:https://www.cnblogs.com/michellexiaoqi/p/9796393.html
Copyright © 2011-2022 走看看