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

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

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. Appium-TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)

    文章转自:https://www.cnblogs.com/lfr0123/p/13679568.html swipe一般用于对页面进行上下左右滑动操作,但自动化过程中还会遇到其他情况,如对控件元素进行 ...

  2. Lua中创建新的文件夹

    如下: os.execute('mkdir 文件夹名称')

  3. Unity简单使用 Addressables远端打包流程

    跟着一步步操作即可 1.先打开一个unity项目 2.导入插件资源包地址,点击如图片所示 3.最后点击导入就行了也就是第三步 Install 4.这是在点击 Window 安装后Window/多了一个 ...

  4. web.py 中的分页设计

    1.定义分页类 class Pagination(object): ''' 分页类 参数: per_page:每页数量 total_data:总数目 cur_page:当前页. 用法:(flask,h ...

  5. [localhost-startStop-1]

    第一次遇到Tomcat在Linux服务器启动卡住的情况,情况很简单,tomcat启动以后卡在INFO: Deploying web application directory ......这句话,具体 ...

  6. MOBI 】逆流而上的我:重塑心理韧性,在逆境中实现自我超越【早稻田大学名誉教授、哈佛大学客座研究

    书本详情 标题:逆流而上的我:重塑心理韧性,在逆境中实现自我超越[早稻田大学名誉教授.哈佛大学客座研究员加藤谛三的年度心理学温情巨作!掌握心理韧性,每个人都是生活的修行者!] | 加藤谛三 |年份:2 ...

  7. (三)用go实现平衡二叉树

    本篇,我们用go简单的实现平衡二叉查找树.具体原理参考大佬博客即可:AVL树(一)之 图文解析 和 C语言的实现 1.节点定义 type AVLNode struct{ data int height ...

  8. 智能插座的制作(esp01,继电器,arduino)

    前言: 现在小学信息技术的教材中已经出现了物联网的内容,比如泰山版小学信息技术教材第六册第二单元第一课就是用手机控制智能插座.就起了自己动手制作一个的心思,通过到网上浏览制作智能插座的文章后,有了基本 ...

  9. params的使用

    今天在写vue的JavaScript的时候有个地方需要传很多参数,自己写不出来,求助 我的博博 后拿到神奇代码: 神奇代码中有params,俺自作聪明,以为他是一个json的数据,所以自己改了个名字 ...

  10. 字符串内特殊字符的替换处理,如对\n的替换

    一.对于字符串特殊字符的替换 对于字符串内,\n的处理,如何去掉 s='123,456\n' s1=s.strip('\n') s2=s.replace('\n','') print(s) print ...