一、 封装
(1)广义:将多个数据定义和行为定义装起来。
(2)狭义:将属性私有化,通过公有化的方式进行操作,提高代码的安全性。
看如下没有封装的例子:
创建一个员工类:
public class Employee {
//public:公有,所有地方都可以访问,private:私有,只有自己内部可以访问
//不封装
public string empNO; //工号
public string empName; //姓名
public string empSex; //性别
//方法
public void sayHi() //自我介绍
{
Console.WriteLine("大家好");
Console.WriteLine("我的学号是:"+this.empNO);
Console.WriteLine("我的姓名是:" + this.empName);
Console.WriteLine("我的性别是:" + this.empSex);
}
}
在main方法中创建员工,并且为字段赋值,调用sayHi()方法打印信息。
Employee emp = new Employee();
emp.empNo = "001";
emp.empName = "张三";
emp.empSex = "中";
emp.sayHi();
我们可以看到,当我们对性别赋值错误,程序没有做任何处理,直接执行成功了,并且将错误的性别可以直接通过sayHi()方法打印出来。
为了解决此代码安全性问题,我们可以进行属性封装。
C#中将字段封装成属性,需要将字段设置成private私有,然后添加public的属性,指定get,set访问器:
public class Employee {
//public:公有,所有地方都可以访问,private:私有,只有自己内部可以访问
//封装
private string empNO; //学号
//属性封装的基本语法格式,其中get表示属性可读,set表示属性可写。
public string EmpNo
{
get{return empNO;}
set{empNO=value;}
}
//如果不需要做任何控制,可以省略私有成员,简写如下
public string EmpName{get;set;}
private string empSex; //性别
//如果对性别进行属性封装,规定性别赋值只能是“男”或“女”
public string EmpSex
{
get { return empSex; }
set {
if (value.Equals("男") || value.Equals("女"))
{
empSex = value;
}
else
{
empSex = "";
Console.WriteLine("性别输入有错误!");
}
}
}
//方法
public void sayHi() //自我介绍
{
Console.WriteLine("大家好");
Console.WriteLine("我的学号是:"+this.EmpNO);
Console.WriteLine("我的姓名是:" + this.EmpName);
Console.WriteLine("我的性别是:" + this.EmpSex);
}
}
在main方法中创建员工,并且给属性赋值,调用sayHi()方法打印信息。
Employee emp = new Employee();
emp.EmpNo = "001";
emp.EmpName = "张三";
emp.EmpSex = "中";
emp.sayHi();
此时,程序可以进行性别的判断,将错误值进行屏蔽,打印出来的信息中性别是空的。
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/16105925.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。