C# 封装

c#的有5个,比c++多两个
public:所有对象都可以访问;
private:对象本身在对象内部可以访问;
protected:只有该类对象及其子类对象可以访问
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型。

后面两个是c++没有的,这里记录下。

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

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        //成员变量
        //internal double length;
        //internal double width;
        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());
        }
    }//end class Rectangle    
    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 4.5;
            r.width = 3.5;
            r.Display();
            r.GetArea();
            Console.ReadLine();
        }
    }
}

在上面的实例中,请注意成员函数 GetArea() 声明的时候不带有任何访问修饰符。如果没有指定访问修饰符,则使用类成员的默认访问修饰符,即为 private。
这里,如果改成下面的形式,编译会出错
//internal double length;
//internal double width;
double length;
double width;
错误 1 “RectangleApplication.Rectangle.length”不可访问,因为它受保护级别限制 C:UsersAdministratordocumentsvisual studio 2010ProjectsinternalinternalProgram.cs 29 15 internal
领导,下面的函数没有前缀,说明是private,那么在vs中r.后面是不会有GetArea下拉选项的。

double GetArea()
{
return length * width;
}

Protected Internal 访问修饰符
Protected Internal 访问修饰符允许在本类,派生类或者包含该类的程序集中访问。这也被用于实现继承。这个还不是很熟悉,以后再学

原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11845409.html