C#面向对象之封装。
封装是面向对象的基础和重要思想之一,今天具体的了解封装这一特性后发现其实自己已经接触过很多关于封装的内容了。
一、什么是封装。
封装的概念:将具体的实现细节装到一个容器中,封闭或隐藏起来(使用访问修饰符private来实现),防止容器外部直接访问内部的实现细节或更改内部成员,仅对外公开对应的接口来访问。
二、封装的实例。
1.封装字段。
class Person
{
public int age;
}
在person类中,如果要使用age字段,那么就必须设为public,但是这样是不安全的,因为这样外部可以任意访问或修改它,并且会出现age=500,这样的非法值。解决方案:用属性来封装字段。
class Person
{
private int _age;
public int age
{
get { return _age; }
set
{
if (value > )
{
throw new Exception("error");
}
else
{
_age = value;
}
}
}
}
将_age设为private,然后向外开放一个age的接口来设置它,这样外部并不能访问到_age,并且可以通过属性限制字段的合法性。
这样也可以看出字段与属性的关系:属性是字段的封装。
2、一堆代码封装在一个方法里。
这个很简单,就是写一个方法,像tostring()一样,是.net里封装好了的方法,我们直接用就是,而并不关心具体的实现,如果名字取得的得当,还能清楚地知道这个方法的功能。
3、方法的多个参数封装成了一个对象。
class Program
{
static void Main(string[] args)
{
Record("小明", , );
}
private static void Record(string name, int age,int phone)
{
Write(name, age,phone);
}
private static void Write(string name, int age,int phone)
{ }
}
比如开学了,学校要用Record方法记录同学的信息,但Record方法中又有一个Write方法要做其他事,这时候就要传递很多参数。解决方法:
class Program
{
static void Main(string[] args)
{
Record(new Student() { name="小明",age=,phone=});
}
private static void Record(Student student)
{
Write(student);
}
private static void Write(Student student)
{ }
}
class Student
{
public string name { get; set; }
public int age { get; set; }
public int phone { get; set; }
}
定义一个Student类,参数传递只需要传递一个对象即可。
三、综上,封装的好处。
1、隔离性,安全性,被封装后的对象(这里的对象是泛指代码的编程单元,一般指:程序集,命名空间,类,方法,属性,变量等)其外部对象是无法直接访问对象的内部实现细节,内部实现细节的的改动不会影响到外部对象的访问原则。
2、可读性,被封装的对象的名称恰当的话,可以不看具体实现的情况下,了解该对象的作用。
最新文章
- oracle加并行参数PARALLEL
- spark操作geoip的domain数据库
- samba的rpm包,只有tar.gz文件安装
- Linux驱动之HelloWorld
- 第四十二章 微服务CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)
- EXCEL 保存之前校验
- c#之双色球
- Redis 服务器
- webkit,HTML5头部标签
- Java 406
- 笔记--cocos2d-x 3.0 环境搭建
- 详解EBS接口开发之应收INVOICE导入
- [C++学习历程]Visual Studio 2010 中文旗舰版 安装
- 第四十篇-private,public,protected的区别
- 4. Go常量
- ASP.NET Core中代码使用X509证书,部署到IIS上后报错:System cannot find the specified file 的解决办法(转载)
- Pytorch中RoI pooling layer的几种实现
- #1 // BZOJ 4361 isn
- Android_ 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法
- re模块逐步进阶
热门文章
- C++中_cplusplus及Extern ";C";的理解
- html基础知识梳理
- Hadoop Partition函数应用(归档)
- Android 关于解决MediaButton学习到的media控制流程
- MySQL InnoDB 行记录格式(ROW_FORMAT)
- 《深入浅出nodejs》读书笔记(1)
- Source优化
- 签名时出错: 未在路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
- python基础-列表(7)
- JSON库的使用研究(二)