在C#中有一些我自己认为比较独特的知识点,这些知识点是我经常使用的知识,但对它们的了解还是比较少的,所以通过查找资料学习,总结了这些独特的知识点并简单叙述,第一篇主要是一些概念和思想方面的知识。(后面还有C#其他篇的文章)

一.C#概念

C#语言是从C和C++语言演变而来的,是微软创建的一门面向对象、运行在.NET Framework上的高级程序语言,是Windows的一个必要组件,包括一个称为公共语言运行时(common language runtime,CLR)的虚拟执行系统和一组统一的类库。(C#源文件扩展名为.cs)

C#与Java有很多相似的地方:继承、接口、声明命名空间(using&import)、从Main入口点开始执行、源代码被编译成中间状态等。同时也有明显不同之处:C#借鉴了Delphi的与COM是直接集成的特点、它们所执行的平台也不相同,Java运行环境JRE(Java Runtime Environment),C#运行环境CLR(Common Language Runtime),且CLR支持多种语言;同时C#提供封箱装箱等方法。

二.面向对象思想

面向对象是将客观事物看做属性和行为的对象,通过抽象同一类对象的共同属性和行为,形成类。通过对类的继承和多态实现代码重用等。对象(Object)是类(Class)的一个实例(Instance),如果将对象比作房子,那么类就是房子的设计图(类中定义包括属性和方法)。

面向对象的三个基本特征为:

(1).封装:把客观事物封装成抽象的类,类中数据和方法只让可信类或对象操作,不可信的隐藏(内部细节)

(2).继承:它可使用类的所有功能,无需重新编写原有类且对功能进行扩展

(3).多态:一般类中定义的属性或行为,被特殊类继承后,可以具有不同的数据类型或表现不同的行为,各个类能表现不同的语义,实现的两种方法为覆盖和重载

通过下面的例子来讲解面向对象:

例1:让你编写一个计算长方体体积的程序,通常的思想是定义3个变量长=a,宽=b,高=c,体积v=a*b*c;而在面向对象思想中先创建一个长方体的类,在类中定义长宽高和体积,然后定义方法,在实例化使用。(C++代码)

class Rect {
public:void showArea(…);         //定义方法:计算长方体体积
private:float a,b,c,v;            //定义属性:长 宽 高 体积(私有成员)
}
void Rect::showArea(…) {…}

这样的好处是它是站在事物本身的角度去思考解决问题,如果上面采用面向过程定义函数的形式实现,当出现多个形状时,你需要对每一种形状都定义一种方法,而面向对象只需把这些形状的属性和方法抽象出来,更加方面的实现。

值得注意的是,面向对象提供的是一种思想,而非仅仅是课本中的那点知识,很多时候我们仅仅是把使用了C++、C#或Java一门面向对象的语言,或者是定义了几个类、使用继承等知识就认为自己运用了面向对象(我就是这样的);但我更认为面向对象是一种思想,一种更好的解决实际问题的方法。比如有这样一个问题:

例2:为了方便儿童学习编程,X公司开发了一套Racing Car 模拟器,使用这个模拟器每个孩子都可以用一种简单的语言来控制一辆赛车,例如,right,left等。请设计一种简单的语言,给出它的语法,以及该语言的类图。

这就是我们实际编程中联系到生活的问题,它涉及到了设计模式的相关知识,其中我采用的方法是“命名模式”实现的:客户端是定义Children和Car,请求者是Children发出的Right\Left\Up\Down命令,接受实现者是Car执行Move(),抽象命令是上下左右的抽象接口,具体命令是Car的上下左右。我制作的类图如下:

通过这个例子我不是想证明我采用命令模式和画的类图是否正确,我想阐述的想法是我们学习面向对象知识主要是用来解决实际生活中的问题,让它更加高效的解决问题和优化代码。在学习《设计模式》时老师就曾说过“模式是现成的,但实现方法要靠自己;同时,学习的时候要敢于否认自己以前很熟悉的套路,甚至经典套路,只要能更加高效正确的完成项目,你的模式就很可能就是经典。”所以,我才认为面向对象是一种思想,不是宏观的C语言就是面向过程,C++、C#就是面向对象。

同时,面向对象思想要适应需求的变化,解决用户的实际需求,在设计时就要尽量考虑到变化,会涉及到抽象、封装变化(重点)、设计模式等知识。补充:C#中的对象都是System.Object的子类,即所有对象都继承System.Object,这样的好处是所有的对象都可以有公用的方法,如ToString()方法。

三.总结

上面的内容主要是我对C#基础知识的一些自己理解,很可能我理解思想是错误的,但我更希望提供一种自己的思想与大家分享。同时,由于知识有限,做的项目也少,可能理解有错误的地方或还没有理解更深层的地方,见谅!最后希望几十年后的自己也能像很多大神一样回过头来对年少时的自己写的这些博文做些更深入的分析,在根据那时的经历写出更优秀的阅历与大家分享更深刻的经验!鼓励自己与大家加油。

(By:Eastmount 2013-8-20 夜1点)

参看一些书籍孙景瑞的《从零开始学C#》、罗刚的《使用C#开发搜索引擎》、《设计模式》课件、同时参考了CSDN论坛中一篇关于面向对象的讨论,个人认为非常不错。http://bbs.csdn.net/topics/220013605

C# 基础知识 (一).概念与思想篇相关推荐

  1. 计算机数据库管理基本知识,2015年计算机四级考试《数据库技术》基础知识:概念篇...

    2015年计算机四级考试<数据库技术>基础知识:概念篇 信息与数据 1. 信息.物质.能量是组成客观世界并促进社会发展的三大基本要素; 2. 信息(Information)--是客观世界事 ...

  2. Vue基础知识总结(二):进阶篇

    Vue基础知识总结(二):进阶篇 1.0 MVVM模式 MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式. MVVM模式将页面,分层了 M .V.和VM , ...

  3. 数据挖掘-数据挖掘综述-基础知识和概念总结

    数据挖掘-数据挖掘综述-基础知识和概念总结                                                  目录 数据挖掘-数据挖掘综述-基础知识和概念总结 1.数据 ...

  4. 《统计自然语言处理》读书笔记 一.基础知识及概念介绍

    最近准备学习自然语言处理相关的知识,主要参考<统计自然语言处理·宗成庆>和<Natural Language Processing with Python>,推荐大家阅读.第一 ...

  5. 信息系统项目管理师核心考点(六十四)信息安全基础知识重要概念

    科科过为您带来软考信息系统项目管理师核心重点考点(六十四)信息安全基础知识重要概念,内含思维导图+真题 [信息系统项目管理师核心考点]信息安全基础知识重要概念 1.加密技术 ①对称加密[加密与解密的秘 ...

  6. ArduPilot之开源代码基础知识Threading概念

    ArduPilot之开源代码基础知识&Threading概念 1. 源由 2. 基础知识 2.1 The timer callbacks 2.2 HAL specific threads 2. ...

  7. Python基础知识及概念

                                        Python基础知识及概念 1.     注释 单行注释 #这是一个单行注释  ·       在程序开发时,同样可以使用 #  ...

  8. 蛋白质结构预测---残基接触的基础知识---接触概念(三)

    蛋白质结构预测---蛋白质残基的基础知识---接触概念(三) 一.接触(contact)的概念 二.蛋白质的接触矩阵 三.蛋白质的接触矩阵的意义 四.小结 承接上文接下来我会用一条PDBID为1F88 ...

  9. 知识图谱基础知识(一): 概念和构建

    推荐: 知识图谱构建技术一览 知识图谱基础知识之三--知识图谱的构建过程 目录 一.什么是知识图谱 二.知识图谱的分层架构 三.知识图谱构架技术 (一)数据获取(Data Acquisition) ( ...

最新文章

  1. 地面标识检测与识别算法
  2. php const 字符串,我可以使用字符串连接在PHP中定义一个类CONST吗?
  3. php把excel转化为csv,php xls如何转csv
  4. Http协议--Get和Post区别
  5. java插入排序实现,经典(Java版)排序算法的分析及实现之一直接插入排序
  6. C++ static 类成员
  7. LinkedHashMap与HashMap的使用比较
  8. java path combine_Path.Combine (合并两个路径字符串)方法的一些使用细节
  9. 老罗锤子手机公布会,我感到深深地愧疚
  10. 异速联服务器虚拟打印怎么设置,金万维异速联6.2.2.0虚拟打印步骤.doc
  11. 华为手机上的网上邻居怎么用_华为手机如何无线连接电脑
  12. 晨风机器人成语接龙_使用晨风QQ机器人在群内玩成语接龙的方法
  13. 3D 专业词汇 (转)
  14. OPCUA 设置登录用户名与密码
  15. Python绘制3D立体花
  16. Backpack VI
  17. 28. 尚融宝借款额度审核
  18. C#中定义装箱和拆箱详解
  19. 【笔记】openwrt - full cone NAT(全锥NAT)、解决“arp_cache: neighbor table overflow!”
  20. CentOS7 NVIDIA显卡驱动安装教程(亲测有效)

热门文章

  1. 【转载】target='_blank' 安全漏洞示例
  2. vue骨架屏、时间选择器、轮播图。。你想要的这里全都有
  3. PAT 1038. 统计同成绩学生
  4. HDU 4787 GRE Words Revenge
  5. Centos下MySql用户管理
  6. PHP 文件创建/写入
  7. java io读书笔记(2)什么是stream
  8. 初学 Delphi 嵌入汇编[26] - 大小写字母转换
  9. weblogic占用java_weblogic内存占用过大调优
  10. 上海有哪些计算机技术专科学校,上海计算机专业大学排名,第一名居然是这所大学!...