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

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

一.C#概念

C#语言是从CC++语言演变而来的,是微软创建的一门面向对象、运行在.NET Framework上的高级程序语言,是Windows的一个必要组件,包括一个称为公共语言运行时(common language runtimeCLR)的虚拟执行系统和一组统一的类库。(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等。请设计一种简单的语言,给出它的语法,以及该语言的类图。

这就是我们实际编程中联系到生活的问题,它涉及到了设计模式的相关知识,其中我采用的方法是“命名模式”实现的:客户端是定义ChildrenCar,请求者是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

posted @ 2013-08-20 21:02  pangbangb  阅读(239)  评论(0编辑  收藏  举报