什么是类的封装?
—— 新手编程1001问之C#编程基础
有一个问题,一直比较困扰。什么是类的封装?不就是创建一个类吗?为啥叫封装呢?不装会死吗?到底是多此一举呢,还是暗藏玄机?请指教。
哈哈,这么犀利的问题!不过,不知道为什么会困扰到你。
其实吧,要说类的封装,还真就是创建一个类。但是,为啥要叫它为“封装”呢?如果一定要说玄机,那么,玄机就在”封装“这里。
我们知道,类,因为其拥有的字段、属性和方法等成员的不同,而有很多种。有主要用于存储数据用的数据模型类,也有解决问题用的程序方法类。它们都有一个共性,那就是,我们创建的数据模型,在项目中会被反复用到,我们创建的程序方法,也会被反复用到。
那如果,我们在程序代码中创建一个类,就仅仅只是为了当前范围(域)内使用一次,开发项目的其他地方基本不会再用到。那么,我们在里创建这个类,确实就只能算“创建了一个类”,用完即止。
但是,更多的时候不是这样的,我们要定义一个数据模型,让它存储一个相对复杂的数据结构。这样的数据结构,大概率会在不同的地方反复用到,甚至传递一个复杂的数据参数时也会用到。不然,我们为什么要定义它?不如写一堆变量来得直接。你说,不,我就是想创建类,我喜欢用类存放数据。那么,难道你每次都临时创建一个吗?别说会出现一堆数据结构相同类名不同的东西在一起容易混淆,不易维护、更新,单单说你这样做,不觉得累吗?自虐真的好玩吗?程序员还不够苦吗?我们自己不学会帮自己省点力气,还指望谁能帮你呢?
所以说嘛,作为程序员,我们在下手写代码之前,咱得先静下心来,好好琢磨一下,我们需要创建哪些类?或者我们已经创建过哪些类?它们能重复使用吗?如果能,建议你就把它们集中放到一个自定义的类库里,不管程序代码走到哪里,需要的时候就调用它,这样不香吗?有必要重复写吗?写一万次,你顶多变成一个码字专家,而无法成为编程专家。所以,现在明白了?什么叫类的封装?
类的封装是面向对象编程的重要思想之一。它不是一个行为、一个操作,它是一种思想,一种面向对象编程的思想。
程序员的行业里流行一句话,叫做“不要重复你的代码”,也是这个意思。但凡你遇到需要再写一段已经写过的代码,你就应该想到,是否应该将这段代码“封装”起来,在任何需要用到的地方直接调用它,这叫“一次编码,重复调用”。
为了确保不同地方调用相同的代码能够实现通用,我们在创建这些代码时,需要对它的参数变量、字段、属性和方法等进行“泛化”处理,以确保能重复使用而不报错。这个与我们单点创建临时的类对象时,程序员的心态和处理方法,包括“穷举思维”的应用,都是完全不一样的。所以,封装的确是有重要意义的。
如果遇到一个较大一点项目,不会封装真的会死的,会累死!想好好活着,快乐编程,还是好好学会封装吧。
好,到此,我们小结一下:
创建一个类,实际上是将具有特定属性或功能的数据或方法,“打包”定义到一个模块中,供我们需要时调用它们。这个打包的行为,我们也称“类的封装”。
这就是工业领域里“部件集成”的概念。从这个角度,实际编程的实务中,类的封装几乎就是我们日常编程的主要任务了。
封装类的好处:
- 封装可以隐藏实现的细节,实现代码模块化。
- 支持重复调用。
下面我们看两个示例:
类的封装示例1:属性赋值的方法
代码语言:javascript复制// 自定义类,封装加数和被加数的属性
public class MyClass
{
public int x { get; set; }
public int y { get; set; }
public int Add()
{
int z = x y;
return z;
}
}
代码语言:javascript复制//下面是对上述加法封装类的应用
class MyProgram
{
static void MyAdd()
{
//创建类的实例
MyClass myClass= new MyClass();
//给实例字段赋值
myClass.x = 3;
myClass.y = 5;
//调用方法
int myZ = myClass.Add();
//打印输出
Console.WriteLine(myZ);
}
}
类的封装示例2:调用传参的方法
代码语言:javascript复制// 自定义类,封装加数和被加数的属性
public class MyClass
{
//创建两个形参
public int Add(int x, int y)
{
int z = x y;
return z;
}
}
代码语言:javascript复制//下面是对上述加法封装类的应用
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:内部访问,同一个程序集中的所有类都可以访问,一般都是限于本项目内。
必要的场合,可选择使用。
更多问答请访问我的官网:高渡 - 爱高渡、学编程、手把手教你