C#学习笔记-封装
前言
说起来惭愧,学了大半年的C#,其实最开始就接触到了封装的部分,但是一直模模糊糊的弄不清楚,也觉得没什么影响就没怎么在意,现在才开始认真的看这部分内容,看懂了过后好多东西清晰了不少,才发现封装这个基础那么那么重要。
现在反过来一想,封装和类这些其实就是当初最开始学习面向对象编程的时候老师教的定义,最基础的最基础,我居然到现在才弄懂,我也是对不起我以前交的学费啊!(悲痛!)
但是以前学习的时候,老师也是拿着书本,我也是拿着书本,没有练在手上,所以很多东西都太空洞了!还是那句话:“纸上得来终觉浅,绝知此事要躬行”!
定义
封装就是将数据或函数等集合在一个个的单元中。
在我的理解里封装就是“打包”,至于你是打包带走,还是打包扔了,还是打包给谁,都是你的自由。
就像我要去上学,我就要把所有要用的东西全部装到书包里带走到学校一样,我把所有的教科书、练习册、文具盒、笔记本、便利贴等等全部都放在一个包里,我要去上学,我就执行背上书包的动作就好了,因为我的所有的工具都已经“打包”好了,要是让别人帮我把书包带到学校去也是一样的道理,他们并不需要知道我书包里装了什么,他们只要执行帮我带书包这个动作就好了。我的书包里面的东西他们可以用久了废了然后扔了,也可以一直都在,还可以装入新的东西。当然这些操作是我书包里面的内部操作,这个只需要我知道就好了,外面的人他们并不关心里面到底发生了什么。
这就是封装的作用:保护数据不被外来因素无意间破坏,同时却也方便外面的操作直接调用。
使用
实际代码操作:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Buy a new car.................");
Car car = new Car();
Console.WriteLine("Here is the information of new car:");
Console.WriteLine("car's color is:{0}", car.Color);
Console.WriteLine("car has {0} types", car.TypeNum);
Console.WriteLine("car's oil is:{0}\t\n", car.Oil);
car.run();
Console.WriteLine("I wanna change the color of car");
car.changeColor(car.Color);
car.fillOil(car.Oil);
Console.Read();
}
} /// <summary>
/// package
/// all things about car can be packaged in the one class
/// </summary>
public class Car
{
int typeNum = ;
string color = "red";
int oil = ; /// <summary>
/// the number of type
/// not allowed to modify,onlyread
/// </summary>
public int TypeNum
{
get
{
return typeNum;
}
} /// <summary>
/// the color of car
/// but we can change the color
/// </summary>
public string Color
{
get
{
return color;
} set
{
color = value;
}
} /// <summary>
/// the oil
/// it always change
/// </summary>
public int Oil
{
get
{
return oil;
} set
{
oil = value;
}
} public void run()
{
Console.WriteLine("Running for a while................\t\n");
} public void changeColor(string oldColor)
{
string newColor = "";
string yORn = "";
Console.WriteLine("Are you sure change the color of your car?Y/N");
yORn = Console.ReadLine(); if (yORn == "y" || yORn == "Y")
{
Console.WriteLine("Please input which color you wanna");
newColor = Console.ReadLine(); if (newColor != oldColor)
{
Console.WriteLine("Your car's new color is {0}", newColor);
}
else
{
Console.WriteLine("Your new color is as same as the old one,so you don't need to change!");
}
Console.Read();
}
else
{
Console.WriteLine("Fine! Your car's color still is{0}", oldColor);
Console.Read();
}
} public void fillOil(int previousOil)
{
int presentOil = ;
Console.WriteLine("Your car's oil is{0}%", previousOil);
Console.WriteLine("Filling the oil.................");
Console.WriteLine("Now,yourcar's oil is{0}%\t\n", presentOil);
Console.WriteLine("Fine!Have a nice day");
Console.Read(); }
}
效果预览:

C#学习笔记-封装的更多相关文章
- C++学习笔记 封装 继承 多态 重写 重载 重定义
C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...
- Java学习笔记——封装、继承和多态
先说说封装: 用new 一条狗来举个例子: public class Dog { //私有化字段 private String name; private int age; //无参构造 Dog(){ ...
- JS学习笔记 - 封装getPosition函数、一串跟着鼠标的div
function getPosition(ev) { var scrollTop = document.documentElement.scrollTop || document.body.scrol ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- Directx11学习笔记【二】 将HelloWin封装成类
我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 My ...
- c++学习笔记之封装篇(上)
title: c++学习笔记之封装篇(上) date: 2017-03-12 18:59:01 tags: [c++,c,封装,类] categories: [学习,程序员,c/c++] --- 一. ...
- 第2课第2节_Java面向对象编程_封装性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之封装性:把属性和方法封装在一个整体,同时添加权限访问. 1.封装性的简单程序如下,看一下第19行,如果我们不对age变量进行权限的管控 ...
- python学习笔记:安装boost python库以及使用boost.python库封装
学习是一个累积的过程.在这个过程中,我们不仅要学习新的知识,还需要将以前学到的知识进行回顾总结. 前面讲述了Python使用ctypes直接调用动态库和使用Python的C语言API封装C函数, C+ ...
随机推荐
- HTTPS工作原理
HTTPS是什么 HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,及以安全为目标的HTTP通道,简单说就是HTTP的安全版本. ...
- 关于大型网站技术演进的思考(十九)--网站静态化处理—web前端优化—上(11)
网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属 ...
- java中文乱码解决之道(八)-----解决URL中文乱码问题
我们主要通过两种形式提交向服务器发送请求:URL.表单.而表单形式一般都不会出现乱码问题,乱码问题主要是在URL上面.通过前面几篇博客的介绍我们知道URL向服务器发送请求编码过程实在是实在太混乱了.不 ...
- 深入挖掘.NET序列化机制——实现更易用的序列化方案
.NET框架为程序员提供了“序列化和反序列化”这一有力的工具,使用它,我们能很容易的将内存中的对象图转化为字节流,并在需要的时候再将其恢复.这一技术的典型应用场景包括[1] : 应用程序运行状态的持久 ...
- Node.js Base64 Encoding和Decoding
如何在Node.js中encode一个字符串呢?是否也像在PHP中使用base64_encode()一样简单? 在Node.js中有许多encoding字符串的方法,而不用像在JavaScript中那 ...
- Tomcat的目录结构
bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe.tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动T ...
- Eclipse 常用快捷键 (动画讲解)
Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率. 编辑相关快捷键 注释 Ctrl + / 快速修复 Ctrl + ...
- iOS-证书申请
本文讲述发布证书的申请 首先登陆https://developer.apple.com(99美元账号) a.点击页面右上角 b.进入 c.选择证书类型 distribution,选择添加 d.点击+后 ...
- Mysql5.7.13主从同步(复制)配置
主从同步是分布式mysql数据库相当重要的配置,现在我在虚拟机上完成主从配置,系统是CenterOS6.5,mysql版本是5.7.13 主服务器的ip是192.168.19.139 副服务器的ip是 ...
- canvas绘图、WebGL、SVG
目录 一.Canvas 1.1.创建canvas元素 1.2.画线 1.3.绘制矩形 1.4.绘制圆弧 1.5.绘制图像 1.6.绘制文字 1.7.随机颜色与简单动画 二.WebGL 2.1.HTML ...