日期:2014-05-17 浏览次数:21168 次
众所周知,面向对象编程的特点为:封装、继承、多态。C#是一门完全面向对象的语言,由于比Java推出的时间还要晚,所以对面向对象的思想的体现比Java还要完美,那么在C#中如何体现封装、继承和多态呢?下面举例并进行说明。
1.封装
封装的好处有以下几点:
①数据不外泄,可以做到一定的保护
②类的使用者不用考虑具体的数据运算,方便
③程序结构性强,层次清晰,便于维护
对相关的字段、方法进行封装固然对面向对象编程起到不可缺少的重要作用,但并不代表不可以访问类或者说具体的实例化对象中的内容,而且为使用者提供接口,仅仅让他们调用就可以了,他们只做他们的工作,不需要考虑或者顾及你写的类具体是做什么的,更不用考虑你写的每一行代码是什么意思。
在C#中,对于变量的封装,往往将需要被在本类以外调用的,以属性的形式出现,而不像C++中是直接以public成员或者private成员加上相关的方法调用,那样要么不符合面向对象的特点,要么太麻烦。
C#中属性的声明:
public class TestClass { public string Info { get; set; } }
C#对方法的封装只需要改变方法的访问级别,比如设为public,或者设为private(或者不写),对应的就是可从外部访问以及仅能从内部访问。
2.继承
大家都知道继承机制可以提高代码的可复用性和可扩展性,以提高开发效率,减少代码量。C#和C++不同,可从一个类继承或实现多个接口,但不可以从多个类继承。
继承语法示例:
class Son : Father { //Do Something }
C#所有的类都继承自System.Object,所以不管是什么类都有几个固定的、公共的方法,这是C#体现面向对象思想非常不错的一点!
下来说一下静态类的特征:
①静态类不能使用sealed或abstract修饰符
②静态类必须直接继承自System.Object,不能是其他
③静态类不能实现任何接口
④静态类不能包含任何操作符
⑤静态类不能包含使用protected或protected internal修饰的静态成员
⑥静态类智能包含静态成员
⑦静态类可以包含静态构造函数,但不能包含实例构造函数
⑧静态类不能被实例化
⑨静态类是密封的,不能被继承
由于静态类是在加载包含该类的程序集时由CLR自动加载,所以用静态类实现一些不操作数据,并且不与代码中的特定对象关联的方法是非常不错的选择。
剩下要注意的就是在使用继承的时候,搞清构造函数的调用顺序,先初始化类的实例字段,再调用基类构造函数,最后调用自己的构造函数。
3.多态
通过基类的引用调用在派生类中实现的方法时,不同的派生类将产生不同的调用结果,这就是多态,而C#中的多态分为运行时多态和编译时多态。编译时多态利用函数重载实现,运行时多态通过覆写虚方法实现。
①方法重载
前提:在同一个类中,方法名相同,方法签名不同(包括方法的名称及参数信息(形参的修饰符、数目、类型以及泛型参数的数目),但返回值类型、形参和类型参数的名称并不属于方法签名的一部分)
方法重载示例:
public string Function(int x) { return x.ToString(); } public string Function(DateTime x) { return x.ToString("yyyy-MM-dd HH:mm:ss.fff"); } public string Function(double x,double y) { return (x+y).ToString(); }
②虚方法
定义虚方法需要使用virtual关键字,如下所示:
class Car { public virtual void Drive() { Console.WriteLine("驾驶.."); } }之所以将Drive设置为虚方法,就是为了让派生的子类去重写,这样所有Car的派生类都可以实现新的Drive方法。
注意:virtual关键字必须位于返回方法的返回类型之前,虚方法可以有方法体,而抽象方法不允许有方法体
剩下两项注意:静态成员函数不能是虚函数,构造函数不能是虚函数
覆写方法示例:
class Track : Car { public override void Drive() { Console.WriteLine("开大卡车"); } } class Jeep : Car { public override void Drive() { Console.WriteLine("开吉普车"); } }
具体的例子就不举了
4.总结
所有的面相对象思想,归根结底是为了简化代码,减少代码量,构建更符合现实生活逻辑的程序代码,从而减轻程序员的负担。不能一味地或者说刻意地去使用面相对象的思想而忽略了程序所实现的功能或者框架,要根据实际情况,合理利用面相对象思想,减轻负担,并为他人提供方便!
转载请注明出处:http://blog.csdn.net/yuanguozhengjust