什么是类的封装?
什么是类的封装?
有一个问题,一直比较困扰。什么是类的封装?不就是创建一个类吗?为啥叫封装呢?不装会死吗?到底是多此一举呢,还是暗藏玄机?请指教。
哈哈,这么犀利的问题!不过,不知道为什么会困扰到你。
其实吧,要说类的封装,还真就是创建一个类。但是,为啥要叫它为“封装”呢?如果一定要说玄机,那么,玄机就在”封装“这里。
我们知道,类,因为其拥有的字段、属性和方法等成员的不同,而有很多种。有主要用于存储数据用的数据模型类,也有解决问题用的程序方法类。它们都有一个共性,那就是,我们创建的数据模型,在项目中会被反复用到,我们创建的程序方法,也会被反复用到。
那如果,我们在程序代码中创建一个类,就仅仅只是为了当前范围(域)内使用一次,开发项目的其他地方基本不会再用到。那么,我们在里创建这个类,确实就只能算“创建了一个类”,用完即止。
但是,更多的时候不是这样的,我们要定义一个数据模型,让它存储一个相对复杂的数据结构。这样的数据结构,大概率会在不同的地方反复用到,甚至传递一个复杂的数据参数时也会用到。不然,我们为什么要定义它?不如写一堆变量来得直接。你说,不,我就是想创建类,我喜欢用类存放数据。那么,难道你每次都临时创建一个吗?别说会出现一堆数据结构相同类名不同的东西在一起容易混淆,不易维护、更新,单单说你这样做,不觉得累吗?自虐真的好玩吗?程序员还不够苦吗?我们自己不学会帮自己省点力气,还指望谁能帮你呢?
所以说嘛,作为程序员,我们在下手写代码之前,咱得先静下心来,好好琢磨一下,我们需要创建哪些类?或者我们已经创建过哪些类?它们能重复使用吗?如果能,建议你就把它们集中放到一个自定义的类库里,不管程序代码走到哪里,需要的时候就调用它,这样不香吗?有必要重复写吗?写一万次,你顶多变成一个码字专家,而无法成为编程专家。所以,现在明白了?什么叫类的封装?
类的封装是面向对象编程的重要思想之一。它不是一个行为、一个操作,它是一种思想,一种面向对象编程的思想。
程序员的行业里流行一句话,叫做“不要重复你的代码”,也是这个意思。但凡你遇到需要再写一段已经写过的代码,你就应该想到,是否应该将这段代码“封装”起来,在任何需要用到的地方直接调用它,这叫“一次编码,重复调用”。
为了确保不同地方调用相同的代码能够实现通用,我们在创建这些代码时,需要对它的参数变量、字段、属性和方法等进行“泛化”处理,以确保能重复使用而不报错。这个与我们单点创建临时的类对象时,程序员的心态和处理方法,包括“穷举思维”的应用,都是完全不一样的。所以,封装的确是有重要意义的。
如果遇到一个较大一点项目,不会封装真的会死的,会累死!想好好活着,快乐编程,还是好好学会封装吧。
好,到此,我们小结一下:
创建一个类,实际上是将具有特定属性或功能的数据或方法,“打包”定义到一个模块中,供我们需要时调用它们。这个打包的行为,我们也称“类的封装”。
这就是工业领域里“部件集成”的概念。从这个角度,实际编程的实务中,类的封装几乎就是我们日常编程的主要任务了。
封装类的好处:
- 封装可以隐藏实现的细节,实现代码模块化。
- 支持重复调用。
下面我们看两个示例:
类的封装示例1:属性赋值的方法
// 自定义类,封装加数和被加数的属性
public class MyClass
{
public int x { get; set; }
public int y { get; set; }
public int Add()
{
int z = x + y;
return z;
}
}
//下面是对上述加法封装类的应用
class MyProgram
{
static void MyAdd()
{
//创建类的实例
MyClass myClass= new MyClass();
//给实例字段赋值
myClass.x = 3;
myClass.y = 5;
//调用方法
int myZ = myClass.Add();
//打印输出
Console.WriteLine(myZ);
}
}
类的封装示例2:调用传参的方法
// 自定义类,封装加数和被加数的属性
public class MyClass
{
//创建两个形参
public int Add(int x, int y)
{
int z = x + y;
return z;
}
}
//下面是对上述加法封装类的应用
class MyProgram
{
static void MyAdd()
{
//定义两个变量,准备用于实参
int x = 3;
int y = 5;
//创建类的实例
MyClass myClass= new MyClass();
//调用实例的方法
int z = myClass.Add(x,y);
//打印输出
Console.WriteLine(z);
Console.ReadLine();
}
}
类的访问修饰符
1、Public:公有的,是类型和类型成员的访问修饰符。对其访问不受任何限制。
2、Private:私有的,私有成员只有在声明它们的类和结构体中才是可访问的
3、Protected:保护成员,仅限该类的内部和继承类中可以访问。
4、internal:内部访问,同一个程序集中的所有类都可以访问,一般都是限于本项目内。
必要的场合,可选择使用。
更多问答请访问我的官网:高渡 - 爱高渡、学编程、手把手教你
- 《WCF服务编程》关于“队列服务”一个值得商榷的地方
- 我的数据访问函数库的源代码(二)—— SQL语句部分
- 来源于WCF的设计模式:可扩展对象模式[上篇]
- 我的数据访问函数库的源代码(三)——返回结构数组
- 我的数据访问函数库的源代码(四)—— 存储过程部分,包括存储过程的参数的封装
- [WCF 4.0新特性] 路由服务[实例篇]
- [WCF 4.0新特性] 默认终结点
- 三层架构之我见 —— 不同于您见过的三层架构。
- 来源于WCF的设计模式:可扩展对象模式[下篇]
- [WCF 4.0新特性] 标准终结点与无(.SVC)文件服务激活
- 我的数据访问类(第二版)—— for .net2.0 (二)
- 我的数据访问类(第二版)—— for .net2.0 (一)
- [WCF 4.0新特性] 路由服务[原理篇]
- 通过“访问多种数据库”的代码来学习多态!(.net2.0版)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 技术篇-含中文编码的代码运行方法,(unicode error) ‘utf-8‘ codec can‘t decode问题原因及解决方法
- Spring Boot Actuators
- 用图机器学习探索 A 股个股相关性变化
- Python 技术篇-连接oracle数据库并执行sql语句实例演示,python连接oracle数据库oci详细配置方法
- MySQL 技术篇-mysql数据库的安装、配置与使用实例演示
- JavaScript 技术篇-js代码获取当前操作系统信息、浏览器版本信息实例演示,windows NT版本对照表
- Oracle 数据库impdp导入数据库版本和dmp数据库文件版本不匹配问题解决方法,ORA-39142版本号不兼容、ORA-39000转储文件说明错误解决方法
- 实践总结:基于Kbone使用React同构开发小程序
- BAT 批处理命令 - 实现输出当前文件夹下的所有文件夹名的功能实例演示
- Python+Selenium 自动化-指定chrome驱动运行selenium实例演示,运行指定位置下的浏览器驱动
- Linux 命令查找指定文件夹下符合查询条件的文件和文件夹实例演示
- 用Python实现一个最新QQ办公版(TIM)的登录界面
- Oracle 数据库直接执行本地sql文件、sql脚本实例演示
- Oracle 数据库利用回收站恢复删除的表实例演示
- Linux 命令利用scp实现从服务器共享地址上传下载文件、文件夹实例演示,scp命令的参数详解