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与数据库开 ...
随机推荐
- Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- sorted函数返回一个新的列表就安全了吗?
arr=[[1,2,3],[4,2,3],[5,2,3]] x2=sorted(arr) print 'sorted',x2 print '-'*20 for ar in arr: ar.append ...
- [ExtJS6学习笔记]Ext JS6主题系列 (Classic工具包)
本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50186709 翻译来源:http://docs.sencha.co ...
- 驱动中如何给ring3层应用程序提权
为什么会有这个需求就不用我多说了吧:) 目前在驱动中提权我知道的有三种办法 1. 该方法来源于stoned bootkit,主要原理是把services.exe的EPROCESS中的Token值取出来 ...
- Erlang简单并行服务器
Erlang简单并行服务器(金庆的专栏)Erlang并行服务器为每个Tcp连接创建对应的连接进程,处理客户端数据.参考 Erlang程序设计(第2版)17.1.3 顺序和并行服务器并行服务器的诀窍是: ...
- spring @Qualifier注解使用
@Autowired是根据类型进行自动装配的.如果当Spring上下文中存在多个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在U ...
- React Native开发工具Nuclide使用
之前写RN的时候首选webstorm,这是之前做前端已经习惯的工具,其实RN开发官网推荐的是Nuclide工具, Nuclide是Fackbook专门为React开发IDE,今天也来尝试下,如果对we ...
- leetcode 3 Longest Substring Without Repeating Characters最长无重复子串
Given a string, find the length of the longest substring without repeating characters. For example, ...
- 1. React介绍 React开发环境搭建 React第一个程序
什么是 React React 是 Facebook 发布的 JavaScript 库,以其高性能和独特的设计理念受到了广泛关注. React的开发背景 Faceboo ...
- 【原创】Nginx+PHP-FPM优化技巧总结
php-fpm的安装很简单,参见PHP(PHP-FPM)手动编译安装.下面主要讨论下如何提高Nginx+Php-fpm的性能. 1.Unix域Socket通信 之前简单介绍过Unix Domain S ...