C#之面向对象
话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是晏众文武,在酒席间,曹操诗兴大发,不觉吟道:“喝酒唱歌,人生真爽”,众文武其呼:“丞相好诗!”于是一臣子速命印刷工匠刻版印刷,以便流传天下。样本出来给曹操一看,曹操感觉不妥,说道:“喝与唱,此话过俗,应改为‘对酒当歌’较好!”,于是此臣就命工匠重新来过,工匠眼看连夜刻版之工,彻底白费,心中郁闷,只得照办。样本再次出来请曹操过目,曹操细细一品,觉得还是不好,说:“人生真爽太过直接,应改问语才够意境,因此应改为‘对酒当歌,人生几何?’”当臣转告工匠之时,工匠吐血身亡!可惜三国时期活字印刷术还未发明,所以类似事情是有发生,如果有了活字印刷,则只需更改个别字即可,实在妙哉。
所以说,四大发明之活字印刷是面向对象的胜利,世界上的万事万物都是有联系的,活字印刷是如何和我们的面向对象进行完美结合的呢?第一,要改,只需更改要改之字,此为可维护;第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用;第三,此诗若要加字,只需另刻字加入即可,这是可扩展;第四,字的排版其实有可能是竖排也有可能是横排,此时只需将活字移动就可做到满足排列需求,此为灵活性。但是在活字印刷术之前,上面的四种特性都无法满足,要修改,必须重刻,要加字,必须重刻,要重新排列,必须重刻,印完这本书后,此版已无任何可在利用的价值。
由上述故事,想到在敲学生管理系统和机房收费系统的时候,为实现某个功能的时候,我们的直觉是用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程,这个其实是用计算机的方式去思考问题,比如说机房收费系统中,上机这个小功能,逻辑思维如下所示:
根据我们的逻辑思维进行相应判断,得到我们想要实现的上机这个小功能,这个过程本身没有错,但是这样的思维却使得我们的程序只为满足当前的需求,缺少灵魂,这样的软件做出来是不规范的,不易维护的,不易扩展的,以及不易复用的。那么面向对象到底是什么?有着怎样神奇的面孔,接下来,我们翻开崭新的一页:
面向对象的知识,前面的博文中有相关介绍,再此不在一一赘述,总的来说面向对象的主要优点以及与面向过程有着那些不一样的地方,如下:
面向对象程序设计中有两个重要概念,Class和Object,以及OMT和面向对象的三个基本特征,具体介绍如下:
对面向对象有了一些基本的掌握,以及类和对象的把控,我们来深入了解C#中的类,类是一种自定义的数据类型,就像整型和字符型,可以使用类来声明变量,用类声明的变量称之为引用变量,所以,类是引用型数据类型,C#提供了创建了类和对象的功能,用C#编程时,要做的主要工作就是定义组成程序各种类,类定义可以作为一个模板或蓝图,封装了她的对象的数据和行为,一旦类定义好了,就可以以她作为模板来创建类的对象和实例,那么,接下来,我们以C#视频中的一个例子-修改密码来看一下,类的创建和实例,首先,我们需要做的是声明一个能判断密码是否正确,并且能够更改密码的类,并在类中定义相关方法:
class Authentic //声明一个判定密码是否正确,并能够更改密码的类 { private string PassWord = "dengyigegushi"; //在类中定义密码 public bool IsPasswordCorrect(string userPassword) //在类中声明判断密码是否正确的方法 { return (PassWord == userPassword) ? true : false; } public bool ChangePassWord(string oldPassWord, string newPassWord)//在类中声明更改密码的方法 { if (oldPassWord == PassWord) { PassWord = newPassWord; return true; } else return false; }
将类实例化
class Program { static void Main(string[] args) { Authentic simon = new Authentic(); //simon是authentic实例化得到的名字 bool done; done = simon.ChangePassWord("dengyigegushi", "dangxingfulaiqiaomen"); if (done == true) Console.WriteLine("密码已更改"); else Console.WriteLine("密码更改失败!"); } }
我们再来举个小例子,具体详细讲述类的创建:
[<访问说明符>] [<修饰符>] class <classname>
{
//body of class
}
其中class是C#创建类所使用的关键字;<classname>是类的名称;<body of class>是类的成员,主要包括属性和方法!C#之旅,未完待续......
C#之面向对象的更多相关文章
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 一起学 Java(二)面向对象
一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- .NET 基础 一步步 一幕幕[面向对象之对象和类]
对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...
- 简单分析JavaScript中的面向对象
初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...
- Java程序员应该了解的10个面向对象设计原则
面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...
- JavaScript学习笔记(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- .NET基础拾遗(2)面向对象的实现和异常的处理基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
随机推荐
- Java第10次实验(数据库)
参考资料 数据结构实验参考文件 MySql操作视频与数据库相关jar文件请参考QQ群文件. 第1次实验 1. MySQL数据库基本操作 完整演示一遍登录.打开数据库.建表.插入 常见错误:语句后未跟; ...
- Java第9次实验(网络)
参考资料 本次作业参考文件 正则表达式参考资料 注:主要根据实验任务书的指导完成本次实验. 第1次实验 1. 网络基础 ipconfig.ping telnet(连接BBS与连接Web服务器的不同) ...
- Java第2次实验提纲(Java基本语法与类库)
1. 使用Git克隆(clone)项目到你的Eclipse项目中 见以下参考资料中的3 从码云将项目clone到你的电脑 重要提示: 使用Git来管理你的代码以后,当你在本机Eclipse项目中开始编 ...
- 纪念 参与GitHub上第一个组织
颇为起伏的一天. 今天大连的风, 甚是喧嚣. 不过,很高兴,小项目被fork了,也成功成为了一个开源贡献者. https://github.com/HostsTools 组织 上的那个Windows- ...
- 教你如何在Android 6.0上创建系统悬浮窗
郭霖大神的文章:http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650235949&idx=1&sn=0f7eded ...
- iOS开源加密相册Agony的实现(一)
简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...
- CSAPP缓冲区溢出攻击实验(下)
CSAPP缓冲区溢出攻击实验(下) 3.3 Level 2: 爆竹 实验要求 这一个Level的难度陡然提升,我们要让getbuf()返回到bang()而非test(),并且在执行bang()之前将g ...
- ORACLE时间日期格式使用总结(参考网上资料汇总)
Oracle时间日期操作 sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdate+5/24 在系统时间基础上延迟 ...
- VisualStudio2010配置OpenCV的一种一劳永逸的方法
用VS使用OpenCV的时候,又不想全局配置,每次都要配置简直烦死了. 鉴于此,给大家介绍一种简便一点的方法. 配置环境的前提是:成功安装了OpenCV合适的版本. 我这里用的是OpenCV2.4.9 ...
- Mac下安装Homebrew并升级subversion
1. 切 Tencent-GuestWiFi2. $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ins ...