什么是封装?

封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。

使用封装的意义?

封装的意义在于保护或者防止代码(数据)被我们无意中破坏。

封装提供了一个有效的途径来保护数据不被意外的破坏。

下面我们看一些c#例子来学习这两种方法用以封装数据。第一种方法,我们使用传统的存、取方法。第二种方法我们用属性(property)。无论我们使用哪种的方法,我们的目标是在使用数据的同时不能使它受到任何的破坏和改变。有如下好处:

其一: 使用者只需要了解如何通过类的接口使用类,而不用关心类的内部数据结构和数据组织方法。

其二:高内聚,低耦合一直是我们所追求的,用好封装恰恰可以减少耦合

其三:只要对外接口不改变,可以任意修改内部实现,这个可以很好的应对变化

其四:类具有了简洁清晰的对外接口,降低了使用者的学习过程

实例一:用传统的读、写方法封装

让我们来看一个例子有一个类Department,为了操纵这个类中的数据(stringdepartname)我们定义了一个读方法和一个写方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{//定义类class Department
{private string departname;public string GetDepartname()
{return departname;
}public void SetDepartname(string a)
{
departname = a;
}
}//客户端实现,使用两个不同方法来写和读数据public class TestAnimal
{static void Main()
{Department d = new Department();d.SetDepartname("ELECTRONICS");Console.WriteLine("The departname is : " +d.GetDepartname());Console.ReadLine();
}
}
}

结果:

The departname is ELECTRONICS

实例二:用属性

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{//定义类class Department
{private string departname;public string Departname
{get { return departname; }set { departname = value; }
}
}//客户端实现,使用两个不同方法来写和读数据public class TestAnimal
{static void Main()
{Department d = new Department();d.Departname = "Communication";Console.WriteLine("The departname is :{0} ", d.Departname);Console.ReadLine();
}
}
}

通过上面的例子,我们可以看到如何通过属性来实现封装。属性具有两种操作get和set。Get用来返回属性域的值。Set通过value这个变量来给属性域赋值。属性可以设为只读的(read-only)。这只需属性只具有一个set操作。

结果:

The departname is :Communication

 

参考:

http://blog.csdn.net/acmilanvanbasten/article/details/8625097

转载于:https://blog.51cto.com/57388/1652438

23. C# -- 封装相关推荐

  1. week2.2数组方法及封装——每天一个JS小总结

    数组的算法 冒泡排序 一种较为简单的排序算法,它会重复的走访需要排序的数列,每一次比较两个元素,如果它们的顺序错误就会被调转过来,从而达到正确排序的作用,最后的结果就会呈现按照一定规律(从大到小/从小 ...

  2. 2021中国IC封装基板市场现状及未来发展趋势

    2020年中国IC封装基板市场规模达到了XX亿元,预计2027年可以达到XX亿元,未来几年年复合增长率(CAGR)为XX% (2021-2027). 本报告研究中国市场IC封装基板的生产.消费及进出口 ...

  3. [课程][原创]yolox检测封装成类调用几句代码完成目标检测任务

    搞定系列:yolox检测封装成类调用 课程地址:搞定系列:yolox检测封装成类调用--深度学习视频教程-人工智能-CSDN程序员研修院 你将收获 1.学会Yolox封装基本技巧和大体思路 2.学会Y ...

  4. SpringMVC上传文件以流方式判断类型附常用类型

    1 // 此类中判断类型所截取的byte 长度暂不确定,请使用者测试过使用 2 package com.tg.common.other; 3 4 import com.tg.common.tginte ...

  5. pytest单侧模块_入门汇总

    Pytest简单介绍 (pytest是python的一个测试框架,主要是用来进行一些小的测试) 安装:pip install -U pytest 查看是否安装成功:pytest --version 运 ...

  6. Java(1-15)

    1.方法参数是引用类型,传递的是内存地址! 2.方法的重载特性:在同一个类中,允许方法同名,只要方法的参数列表不同即可! 3.Stirng特殊在如果静态数据区中存在,那么不创建新的对象,而是指向这个对 ...

  7. WEB测试—功能测试

    1. 链接测试        1.1 测试点: 是否添加链接 链接页面是否存在 链接页面与需求是否一致:页面的正确性.打开方式 等              一般,该链接测试在集成测试阶段(页面均开发 ...

  8. 懒加载(延迟加载)之后,在使用数据过程中容易出现的bug

    在UI中,使用懒加载,也就是延迟加载来加载数据的时候,总是会面临几个问题? 如:1. >为什么先创建NSArray属性? 2. >为什么重写NSArray的get方法? 3.>为什么 ...

  9. 48V LDO三端稳压IC 60v 100V 300V电源降压芯片系统解决方案

    电源芯片: 升压输入1.0V-24V 输出可调3.3V-100V 封装类型SOT23  SOT89 MSOP8  SOP8等  输出电流100mA-2A  功率0.5W-5W 升压输入12V-40V  ...

最新文章

  1. ubuntu截图工具
  2. softmax理论及代码解读——UFLDL
  3. commons-pool2-2.3 jar包_[漏洞复现]FastJson 1.2.61远程代码执行漏洞(From第三方jar包)
  4. P1030求先序排列
  5. 十大Ajax框架 排名不分先后
  6. 两个摄像头合成一路_小米手机成功开发出伸缩式摄像头,秒变单反,这次雷军又火了...
  7. RabbitMQ和Kafka的显著差异(4)
  8. String int之间转换
  9. 信息安全技术网络安全等级保护定级指南_报业网络安全等级保护定级参考指南V2.0发布...
  10. 用拼音输入法字典库实现同音字模糊查询
  11. excel字符串和单元格拼接_单元格引用问题(引用的单元格与字符串变量连接)...
  12. 如何查找期刊是否被SCI收录
  13. 人工智能如何自我进化
  14. 蓝牙Socket通讯
  15. matlab非单位阶跃响应,MATLAB下二阶系统的单位阶跃响应
  16. Delphi大师弗兰克·宝兰德(Frank Borland)回来了!
  17. 算法模型评价详解:confusion matrix Accuracy Precision Recall F1 调和平均 加权F1 Micro-F1 Macro-F1 PRC ROC AUC
  18. 微信公众号如何分享课件PPT?
  19. chromedriver与GOOGLE浏览器对应版本
  20. 二分图的匹配——匈牙利算法

热门文章

  1. 工作中系统报错:数据库连接失败怎么办?
  2. 9月13日学习内容整理:异常处理
  3. 《Web前端开发精品课 HTML与CSS进阶教程》——1.4 id和class
  4. JavaScript 日期格式化 简单有用
  5. IBM copy service--flashcopy 实验
  6. [重构到模式-Chain of Responsibility Pattern]把Fizz Buzz招式重构到责任链模式
  7. Extjs4 MVC 示例
  8. 怎么样配置交换机TRUNK
  9. [导入]关于DataGrid等控件中的自动编号
  10. netbean创建jsf项目