面向对象的三大特征之封装
一,封装的含义
1,封装就是指将数据或者函数等客观的事物封装在在一个个的单元中,我们称之为类, 被封装的对象通常被称为抽象数据类型。
2,类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
3,简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。
4,在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
二,封装的作用
1,可以保护或者防止代码被我们无意中破坏.
2,保护成员属性,不让类以外的程序直接访问和修改;
3,隐藏方法细节
三,关于对象封装的原则
内聚:内聚是指一个模块内部各个部分之间的关联程度
耦合:耦合指各个模块之前的关联程度
封装原则:隐藏对象的属性和实现细节,仅对外公开访问方法,并且控制访问级别
在面向对象方法中,用类来实现上面的要求。用类实现封装,用封装来实现高内聚,低耦合。
封装既可以封装成员变量, 又可以封装成员方法.
四,封装成员变量以及成员方法的步骤:
(1),新建类,
面向对象最基本的单元就是类, 即 .cs文件, 像一个文本文档里面放了C#代码, 创建的类默认的访问修饰符 为 internal, 隐藏显示的.
(2),写构造函数,
类的基本结构就是构造函数, 每一个类都有一个构造函数, 默认的是隐藏的. 访问修饰符必须是public(公开 的/公共的), 并且不需要写任何的返回值, 构造函数的名与类名必须一致.
class Lei
{
//一个类的基本结构必须要有一个构造函数
//构造函数是默认存在的
//每一个类都有一个构造函数, 默认的是隐藏的.
//访问修饰符必须是public(公开 的/公共的), 并且不需要写任何的返回值,
//public Lei() {}构造函数的名与类名必须一致.
//成员变量
//字段
//添加访问修饰符private是为了不让外界而已的修改和获取字段的值
private int nl;
private double sg;
private string xm;
//属性封装
public int Nl
{
//获取/读取字段的值
get => nl;//属性读取
set
{
if (value >= 10 && value <= 20)//限制
nl = value;//属性赋值
else
{
Console.WriteLine("请输入10到20之间的数字!");
}
}
}
public double Sg { get => sg; set => sg = value; }
public string Xm { get => xm; set => xm = value; }
//封装方法
//创建一个没有返回值的方法
//方法本身就是封装;功能的封装,当然后面还可以重复使用(优化代码,提高编程效率)
public void chi()
{
Console.WriteLine("该吃吃该喝喝");
}
/// <summary>
/// 这是一个封装的方法
/// </summary>
public void pao()
{
Console.WriteLine("奔跑吧!");
}
(3),向类中填写信息,
将成员变量以及成员方法 放进去. 并且将成员变量的访问修饰符 声明为 private(私有的,只能被当前 的类访问) .,外界无法访问. 可以声明访问修饰符为 public的属性.
static void Main(string[] args)//main 程序的主入口,.
{
//访问lei中的成员变量
//就要先进行实例化对象(具体化)
//new关键字后面lei方法就是该类对象对应的构造函数
//实例化对象名称前面呢个lei表示是这个类名称
Lei lei = new Lei();
//我们给属性值限制输入为10到20以后,
//当我们输入的数值不在范围里面,那么最后控制台里输出为0
//如果输入的数值在范围当中的话,那么就照常输出
lei.Nl = 15;
//下面no是给lei中的字段进行赋值
lei.Sg = 18.3;
lei.Xm = "张三";
//使填写的信息,显示在控制台中
Console.WriteLine(lei.Xm);
Console.WriteLine(lei.Sg);
Console.WriteLine(lei.Nl);
lei.chi();//封装方法
lei.pao();//封装方法
Console.WriteLine("敲击键盘为止!");
//不让控制台闪退
Console.ReadKey();
//Console.ReadLine();
}
五,重点(属性封装)
在一个类中, 成员变量(private)和属性(public) .
成员变量是无法 直接被外界访问(获取和设置), 因为 这样保证数据的安全. 但是我们可以向外界提供一个接口(属性封装), 这样的话 外界就可以 通过这个 通道 来访问属性对应的值,或者设置属性对应的值.
private int nl;
//属性封装
public int Nl
{
//获取/读取字段的值
get => nl;//属性读取
set
{
if (value >= 10 && value <= 20)//限制
nl = value;//属性赋值
else
{
Console.WriteLine("请输入10到20之间的数字!");
}
}
}