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

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

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. Java面向对象之什么是继承?

    继承 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模. extends的意思是"扩展".子类是父类的扩展. Java中类只有单继承,没有多继承!即 一个儿子只能有一个爸 ...

  2. 页面导出为PDF

    一.使用环境 Vue3.Quasar.Electron 二.安装 jspdf-html2canvas npm install jspdf-html2canvas --save 安装失败可以选择cnpm ...

  3. 【27期】Dubbo面试八连问,这些你都能答上来吗?

    1.Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目.致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA ...

  4. JDK卸载与JDK12 安装

    JDK卸载与JDK12 安装 一.JDK卸载 控制面板>程序和功能>jdk程序(java 8 update 391:java SE Development Kit8 update 391) ...

  5. 慢sql_查询条件加了函数导致索引失效

    问题背景:生产环境查询很慢,通过skywaking全链路监控发现/get请求相关的一个sql为慢sql,慢的原因在于查询字段使用了加解密函数(  CONVERT(AES_DECRYPT(UNHEX(` ...

  6. mysql:数据库加解密查询

    解密:SELECT CONVERT (AES_DECRYPT(UNHEX( column_name), '密钥') USING utf8) AS column_name,from table_name ...

  7. oracle 根据逗号拆分字符串一行转多行

    SELECT A.*, REGEXP_SUBSTR( A.PRODUCTNUMS, '[^,]+', 1, L ) AS PRODUCTNUM,L FROM LG_ZJQH_PRODUCTVALUES ...

  8. JDK下载很慢

    方法1.直接百度jdk镜像,搜到华为镜像:https://repo.huaweicloud.com/java/jdk/ 方法2.到官网拷贝下载的url:https://download.oracle. ...

  9. dll帮助类

    项目中有很多时候用到外部dll,调用的时候如果用静态调用,程序exe目录下有很多dll,看起来很乱,不利于后续维护:动态调用可以把dll放在想放的文件夹内,但是如果一个dll要用到的函数很多,动态调用 ...

  10. Cendos中启动docker失败的问题

    注:在 Windows中使用Linux虚拟机中使用Cendos 刚开始安装Docker时没有任何错误, 但是在后续的docker启动过程中, 出现以下问题: 按提示使用 systemctl statu ...