封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。

抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象

C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。

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

  • public:所有对象都可以访问;
  • private:对象本身在对象内部可以访问;
  • protected:只有该类对象及其子类对象可以访问
  • 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();
    }
    }
    }

    在上面的实例中,成员变量 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();
    }
    }
    }

    在上面的实例中,成员变量 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();
    }
    }
    }

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

  • Protected Internal 访问修饰符

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

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

    范围比较:

    private < internal/protected < protected internal < public

C#封装以及访问修饰符的更多相关文章

  1. 1.7Oob封装 继承 访问修饰符 静态和构造方法的执行顺序

    1:访问修饰符 private     同类中 默认        同类        同包 protect    同类         同包      子类 public     同类        ...

  2. [No0000E7]C# 封装 与访问修饰符

    C# 支持的访问修饰符: Public Private Protected Internal Protected internal Public 访问修饰符 Public 访问修饰符允许一个类将其成员 ...

  3. 类的高级:访问修饰符、封装、静态类成员static、内部类;

    访问修饰符: 公开访问(public):对所有子类,非子类访问: 受保护的(protected):只有同包子类.非子类.不同包子类可访问,不同包非子类不可访问: 私有的(private):只有本类可访 ...

  4. Java包、权限访问修饰符、封装性

    包 概念: 物理上是文件夹:逻辑上是有逻辑关系的类的集合 作用: 避免类重名:控制访问权限 命名规范: 在包名中,可以使用.号来区分包的级别:包名一般情况下是小写 第一级 指该项目的类型,如com,o ...

  5. 什么是封装? ----------------php中"public"类似的访问修饰符分别有什么作用?----什么是抽象?抽象的关键字以及用法----- 什么是接口?接口的关键字以及用法-------------

    什么是封装? ------------------------------------封装是php面向对象的其中一个特性,将多个可重复使用的函数封装到一个类里面.在使用时直接实例化该类的某一个方法,获 ...

  6. C#封装访问修饰符

    C# 封装 封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中".在面向对象程序设计方法论中,封装是为了防止对实现细节的访问. 抽象和封装是面向对象程序设计的相关特性. ...

  7. c# 第33节 类的封装--访问修饰符

    本节内容: 1:封装的简介 2:封装怎么实现 3:访问修饰符 1:封装的简介 2:封装怎么实现 3:访问修饰符 4:访问修饰符注意点

  8. C#面向对象 (访问修饰符、封装、继承、多态)

    先看一下创建一个新项目时的基本格式 using System; using System.Collections.Generic; using System.Linq; //引用的命名空间 using ...

  9. Java访问修饰符和三大特征(封装,继承和多态)

    一.访问修饰符基本介绍: java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围): 1.公开级别:用public修饰,对外公开2.受保护级别:用protected修饰,对子 ...

  10. java访问修饰符

    了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...

随机推荐

  1. 如何用adb连接android手机

    如何用adb连接android手机 以下为手机"root"情况下操作....手机没root请拉到笔记最后,有解决方法 利用adb来连接手机, 有两种方式: wifi usb 通过w ...

  2. HID类GamePad和兼容HID设备报表描述符

    目录 1.12版本规范的GamePad参考报表描述符,报表格式如下图. 用CH582模拟GamePad,在电脑上显示的HID接口↓ 报表描述符↓,其他描述符可以直接参考JoyStick相关一文,改一下 ...

  3. Unity 保存截图功能

    1.下面是实现代码 using System.Collections; using System.Collections.Generic; using UnityEditor; using Unity ...

  4. ENGG1310 Electricity and electronics P1.3 Electromagnetic

    课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self-use, do not include any assignments or exams 这一节主要 ...

  5. Linux 命令 diff

    比较两个文件不同 $ diff file1 file2 比较两个目录不同 $ diff --brief --recursive dir1/ dir2/ --brief 仅显示有无差异,不显示详细的信息 ...

  6. win10:你需要来自XXXX的权限才能对此文件夹进行更改

    转载请注明来源:https://www.cnblogs.com/Sherlock-L/p/16769720.html 起因 软件运行失败,看报错信息是删除某个文件夹失败了,行吧,我自己来删.找到目标文 ...

  7. CentOS 7安装配置vsftp并搭建FTP(一)

    vsftp-VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件.关于这个软件的详细信息 大家可以自行百度. 以上自己安装vsftp系统环境 二.查看自己的服务器是否安装了vsftp ...

  8. Python的入门学习Day 10——form”夜曲编程“

    Day 10 time:2021.8.7. 今天本来打算学习时发现手机应该拿去充电了,再上完J课程之后发现时间确实只留到了晚上呢 .但幸好,以我多天的敲代码的牢固根基(哈哈哈),我最终还是弥补回来了. ...

  9. npm不是内部或外部命令,也不是可运行的程序的解决办法

    通常是nodejs没有安装导致 转载https://segmentfault.com/a/1190000023390756 1.Node.js简介 Node.js 是一个基于 Chrome V8 引擎 ...

  10. Django安装与启动

    安装 python -m pip install Django  查看版本 python -m django --version打开命令行,cd 到一个你想放置你代码的目录,然后运行以下命令: dja ...