封装
来源:互联网 发布:信捷plc的编程方法 编辑:程序博客网 时间:2024/06/06 19:21
简介:可以把程序按某种规则分成很多“块”,块与块之间可能会有联系,每个块都有一个可变部分和一个稳定的部分。我们需要把可变的部分和稳定的部分分离出来,将稳定的部分暴露给其他块,而将可变的部分隐藏起来,以便于随时可以让它修改。这项工作就是封装。
2、意义:封装的意义在于保护或者防止代码(数据)被我们无意中破坏。相比我们将数据在程序中定义为公用的(public)我们将它定义为私有的(private)在很多方面会更好。私有的数据可以用两种方式来间接的控制。第一种方法:我们使用传统的存、取方法。第二种方法:属性(property)。目标就是在使用数据的同时不能使它受到任何的破坏。
3、
好处:一、使用者只需要了解如何通过类的接口使用类,而不关心类的内部数据结构和数据组织方法。
二、高内聚,低耦合一直是我们所追求的,用好封装恰恰可以减少耦合。
其三:只要对外接口不改变,可以任意修改内部实现,这个可以很好的应对变化
其四:类具有了简洁清晰的对外接口,降低了使用者的学习过程
用传统的读、写方法封装 让我们来看一个例子有一个类Department,为了操纵这个类中的数据(string departname)我们定义了一个读方法和一个写方法。
using system; public class Department
{
private string departname; ....... // 读方法
public string GetDepartname()
{
return departname;
} //写方法
public void SetDepartname(string a) {
departname=a;
}
}
通过上面的方法,我们可以保护私有数据不被外部程序所破坏。现在我们使用两个不同的方法来写和读数据
publicstatic int Main(string[] args)
{
Department d = new Department();
d.SetDepartname("ELECTRONICS");
Console.WriteLine("The Departmentis :"+d.GetDepartname());
return 0;
}
在上面的例子中,我们不能直接访问类Department的实例d中的私有数据(stringdepartname),我们只能通过这两个方法来访问。
用属性来实现封装 属性是c#引入的一种语言成分,只有很少的语言支持属性。通过对属性的读和写来保护类中的域。第一种方法体身也是一种好的方式,但用属性来实现封装会更方便。现在我们来看一个例子:
usingsystem;
publicclass Department
{
private string departname;
public string Departname
{
get { return departname; }
set { departname=value; }
}
}
publicclass Departmentmain {
publicstatic int Main(string[] args)
{
Department d= newDepartment();
d.departname="Communication";
Console.WriteLine("TheDepartment is :{0}",d.Departname);
return 0;
}
}
通过上面的例子,我们可以看到如何通过属性来实现封装。属性具有两种操作get和set。Get用来返回属性域的值。Set通过value这个变量来给属性域赋值。属性可以设为只读的(read-only)。这只需属性只具有一个set操作。 只读属性
usingsystem;
publicclass ReadDepartment
{
private string departname;
public ReadDepartment(string avalue)
{
departname=avalue;
}
public string Departname {
get { return departname; }
}
}
public class ReadDepartmain
{
public static intMain(string[] args)
{
ReadDepartment d= newReadDepartment("COMPUTERSCIENCE"); Console.WriteLine("TheDepartment is: {0}",d.Departname);
return 0;
}
}
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- 封装
- Unity3D 世界坐标上一个点对应UI上一个点
- ConcurrentHashMap的putIfAbsent可能存在的问题
- 文件目录常用操作的类
- 环境变量
- jQuery歌词播放器
- 封装
- css属性left、right、top、bottom
- Mysql报错java.sql.SQLException:null,message from server:"Host '27,45,38,132' is not allowed to connect
- Unity三屏全屏方法
- 构成回文序列至少要删掉多少字符
- html 块元素和内敛元素的区别
- 国中国:自己建立一个简单好用的mvc机制(一)
- 自定义控件时Use View.isInEditMode() in your custom views to skip code when shown in Eclipse问题
- LeetCodeOJ——3. Longest Substring Without Repeating Characters