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、可读性,被封装的对象的名称恰当的话,可以不看具体实现的情况下,了解该对象的作用。
C#面向对象之封装。的更多相关文章
- OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)
公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...
- 原生JS面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
- 黑马程序员_Java面向对象1_封装
3.面向对象_封装 3.1面向对象概念 3.1.1理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程:强调的是功能行为(执行者) 面向对象:将功能封装进对象,强调具备了 ...
- Java面向对象(封装性概论)
Java面向对象(封装性概论) 知识概要: (1)面向对象概念 (2)类与对象的关系 (3)封装 (4)构造函数 (5)this关键字 (6)static关键 ...
- python 面向对象之封装与类与对象
封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...
- python面向对象编程 -- 封装、继承
面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...
- C#面向对象(封装)
以上就是面向对象的封装和初始化:
- python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))
昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据. StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对 ...
- python之路----面向对象的封装特性
封装 [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. 广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种只让自己的对象能调用自己类中的方法 狭义上的封装 —— 面向对象的三大 ...
- python之面向对象之封装
今天我们终于进入了面向对象,今天做一下面向的封装的总结 #面向对象的封装 #这里定义了一个类,名称为Role,object是所有类的父类 class Role(object): #这里是定义实例的属性 ...
随机推荐
- .NET工行E生活接入AES加密算法的吐槽-2018
工行E生活V2版本AES加密算法 吐槽一下工行的java算法,真的是非标准的,参考了java代码,还参考了php代码终于搞定了. 真的是很坑,很坑.中间还涉及到多重加密之类的,一行行把代码翻译成C#代 ...
- linux_批量关闭进程
以下环境是 fedora24 linux 系统中的情况: 仿真中遇到意外弹出上百个图片,无法一下全部关闭. 可以使用: ps -ef|grep LOCAL=NO|grep -v grep|cut -c ...
- day16_雷神_前端04
前端day04 链接前端的一些库,一些资源,从bootcdn上搜,有前端所有的库. 前端工作流程: jquery的DOM文档操作 <!DOCTYPE html> <html lang ...
- java实现中缀表达式转后缀表达式
package postfix; import java.util.Stack; /** * * @author DELL 将中缀表达式转化为后缀表达式 */ public class Express ...
- Redux和React
export app class Compo1 extends Component{ } Compo1.propType = { a:PropTypes.string, fn:PropTypes.fu ...
- CS61B HW0
The Enhanced For Loop public class EnhancedForBreakDemo { public static void main(String[] args) { S ...
- 【红色警报】XXE 高危漏洞将大面积影响微信支付安全,可能导致系统沦陷,请升级你的系统!
今天,微信支付发布了一则紧急通知: 尊敬的微信支付商户: 您的系统在接受微信支付XML格式的商户回调通知(支付成功通知.退款成功通知.委托代扣签约/解约/扣款通知.车主解约通知)时,如未正确地进行安全 ...
- Akka-CQRS(1)- Write-side, Persisting event sources:CQRS存写端操作方式
上篇我们提到CQRS是一种读写分离式高并发.大流量数据录入体系,其中存写部分是通过event-sourcing+akka-persistence实现的.也可以这样理解:event-sourcing(事 ...
- 一个xss漏洞到内网漫游【送多年心血打造的大礼包啦!】
i春秋作家:jasonx 原文来自:一个xss漏洞到内网漫游[送多年心血打造的大礼包啦!] 前言 渗透过程中,有时候遇某些网站,明明检测到有xss漏洞,但是盲打以后,收到的cookie还是不能登录后台 ...
- 应用监控CAT之cat-consumer源码阅读(二)
之前讲了 cat-client 进行cat埋点上报,那么上报给谁呢?以及后续故事如何?让我们来看看 cat-consumer 是如何接收处理的? 由cat-client发送数据,cat-consume ...