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());

  }

  }//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

  在上面的实例中,成员变量 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 访问修饰符允许一个类将其成员变量和成员函数对同一应用程序内的子类以外的其他的类对象和函数进行隐藏。这也被用于实现继承。

  本文转载自:w3cschool(编辑:雷林鹏 来源:网络)

雷林鹏分享:C# 封装的更多相关文章

  1. 雷林鹏分享:CodeIgniter 数据库操作

    在平时项目开发过程中,除了处理那些繁琐的逻辑过程外,还有一个重要的任务就是对数据库的操作处理.这里总结下自己平时使用CI过程中使用的如何对数据库进行操作处理. 在CI框架中,我们一般会把对数据库的操作 ...

  2. 雷林鹏分享:C# 类(Class)

    C# 类(Class) 当您定义一个类时,您定义了一个数据类型的蓝图.这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作.对象是类的实 ...

  3. 雷林鹏分享:Ruby XML, XSLT 和 XPath 教程

    Ruby XML, XSLT 和 XPath 教程 什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种 ...

  4. 雷林鹏分享:YAF路由问题

    这2天休年假,在家宅着学习研究了YAF框架,用YAF做过APP接口的项目,但是没有用来做过WEB方面的应用.趁着这2天在家想把博客用YAF进行一下改版,目的也想进一步学习一下YAF. 在这过程中遇到不 ...

  5. 雷林鹏分享:url中加号引发的错误

    刚发现了博客的一个bug,标签页中一些标签带有空格,在url输出中使用了 urlencode 函数进行处理,导致空格被转换成了加号(+),这时通过url访问时会出现错误: 临时解决方法是在urlcod ...

  6. 雷林鹏分享:Composer 安装

    下午在安装 Laravel 框架过程中,遇到了不少问题,因为 Laravel 的安装依赖于 composer,这里就先介绍一下 composer 的安装方法: 安装方法: #下载 sudo curl ...

  7. 雷林鹏分享:Laravel 安装

    前面我们介绍我了 composer安装,这里我们接着来介绍 Laravel框架的安装. 这里我们安装的是laravel 4 项目下载地址:https://github.com/laravel/lara ...

  8. 雷林鹏分享:CodeIgniter常用的数据库操作类

    在 CodeIgniter 中,使用数据库是非常频繁的事情.你可以使用框架自带的数据库类,就能便捷地进行数据库操作. 初始化数据库类 依据你的数据库配置载入并初始化数据库类: $this->lo ...

  9. 雷林鹏分享:jQuery EasyUI 数据网格 - 设置冻结列

    jQuery EasyUI 数据网格 - 设置冻结列 本实例演示如何冻结一些列,当用户在网格上移动水平滚动条时,冻结列不能滚动到视图的外部. 为了冻结列,您需要定义 frozenColumns 属性. ...

随机推荐

  1. 支持图片上传预览的 uploadPreview.js 插件

    原文链接:http://www.lanrenzhijia.com/others/3148.html

  2. jQuery 表单内容的获取

    var formData = $('#myform').serialize()

  3. Flask学习【第11篇】:整合Flask中的一些知识点

    SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import datetime from sq ...

  4. Dart语言快速学习上手(新手上路)

    Dart语言快速学习上手(新手上路) // 声明返回值 int add(int a, int b) { return a + b; } // 不声明返回值 add2(int a, int b) { r ...

  5. centos6.8下搭建编译openwrt的环境

    1. 安装必要软件 su root yum install zlib-devel zlib-static -y 2. 编译openwrt 请参考这里

  6. 集训DAYn——组合数学(1)

    组合 又到了我们信息老师讲数学课了,吼吼吼 然后数学老师中途探望了一下,哇塞塞,然后他看到黑板上的题,微妙的笑了. 排列: 从n个数中有序的选出m个数的方案数是多少?第一个数有n种取法,第二个数有n- ...

  7. 因为强行关机, 而导致的fedora23 不能重新启动, 卡在开机logo那里的 修复 解决方案

    其实, fedora23的U盘live 也很好用, 很流畅, 主要还是 要用一个比较好的/快的 U盘. 这样live U盘在4GB(3.75GiB)的内存中还是较快的 原来的U盘live系统用得很卡, ...

  8. P2596 [ZJOI2006]书架

    思路 一开始写fhq-treap 感觉越写越感觉splay好些,就去splay 然后维护序列 注意前驱后继的不存在的情况 但不用插入虚拟节点(那插入岂不太麻烦) 跑的真慢的一批,splay太多了 错误 ...

  9. html 之 区块元素属性(待补充)

    区块标签:(会随着父类的宽度变化而变化) p,div 等(后续补充) 区块标签才能使用以下属性() width,height,min-height,max-height,min-width,max-h ...

  10. .net Core 2.1 后 Session保存,新页面获取不到值

    https://blog.csdn.net/kuui_chiu/article/details/81060051 https://blog.csdn.net/niunan/article/detail ...