前言

  说起来惭愧,学了大半年的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#学习笔记-封装的更多相关文章

  1. C++学习笔记 封装 继承 多态 重写 重载 重定义

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

  2. Java学习笔记——封装、继承和多态

    先说说封装: 用new 一条狗来举个例子: public class Dog { //私有化字段 private String name; private int age; //无参构造 Dog(){ ...

  3. JS学习笔记 - 封装getPosition函数、一串跟着鼠标的div

    function getPosition(ev) { var scrollTop = document.documentElement.scrollTop || document.body.scrol ...

  4. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  6. Directx11学习笔记【二】 将HelloWin封装成类

    我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 My ...

  7. c++学习笔记之封装篇(上)

    title: c++学习笔记之封装篇(上) date: 2017-03-12 18:59:01 tags: [c++,c,封装,类] categories: [学习,程序员,c/c++] --- 一. ...

  8. 第2课第2节_Java面向对象编程_封装性_P【学习笔记】

    摘要:韦东山android视频学习笔记  面向对象程序的三大特性之封装性:把属性和方法封装在一个整体,同时添加权限访问. 1.封装性的简单程序如下,看一下第19行,如果我们不对age变量进行权限的管控 ...

  9. python学习笔记:安装boost python库以及使用boost.python库封装

    学习是一个累积的过程.在这个过程中,我们不仅要学习新的知识,还需要将以前学到的知识进行回顾总结. 前面讲述了Python使用ctypes直接调用动态库和使用Python的C语言API封装C函数, C+ ...

随机推荐

  1. Unity依赖注入使用详解

    写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...

  2. 负载均衡的场景下ASP.NET Core如何获取客户端IP地址

    在ASP.NET中,使用负载均衡时,可以通过ServerVariables获取客户端的IP地址. var ip = request.ServerVariables["HTTP_X_FORWA ...

  3. ABP理论学习之Swagger UI集成

    返回总目录 本篇目录 介绍 安装 安装Nuget包 配置 测试 介绍 从官方网站上可以看到:"启用了Swagger API,就可以获得交互式文档,生成和发现客户端SDK". 安装 ...

  4. 一小时包教会 —— webpack 入门指南

    什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...

  5. ASP.NET MVC 5 Web编程2 -- URL映射(路由原理)

    本章将讲述ASP.NET MVC5 的路由原理,即URL映射机制. 简单点就是解释:为什么MVC在浏览器输入地址就能访问到类(或类中的方法)?这是怎么做到的?我自己可以通过.NET写出一个自己的MVC ...

  6. Appium的安装-MAC平台

    其实Appium的安装方式主要有两种: 1)自己安装配置nodejs的环境,然后通过npm进行appium的安装 2)直接下载官网提供的dmg进行安装,dmg里面已经有nodejs的环境和appium ...

  7. sublime text 下的Markdown写作

    sublime text 2(3)下的Markdown写作 什么是 Markdown wiki Markdown 是一种方便记忆.书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富 ...

  8. DLL导出函数和类的定义区别 __declspec(dllexport)

    DLL导出函数和类的定义区别 __declspec(dllexport) 是有区别的, 请看 : //定义头文件的使用方,是导出还是导入 #if defined(_DLL_API) #ifndef D ...

  9. Oracle 把秒转成时分秒格式(hh24:mm:ss);检测字符串是否是数字;字符串转换为数字

    不说废话,贴代码: CREATE OR REPLACE FUNCTION to_time(sec IN NUMBER) RETURN VARCHAR2 IS /*把秒转成时分秒格式 auth lzpo ...

  10. Sql Server系列:流程控制语句

    T-SQL中用来编写流程控制模块的语句有:BEGIN...AND语句.IF...ELSE语句.CASE语句.WHILE语句.GOTO语句.BREAK语句.WAITFOR语句和RETURN语句. 1 B ...