您的位置:首页 > 职场人生

黑马程序员_面向对象编程(OOP)技术

2013-06-17 17:32 639 查看
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流!
----------------------

上文介绍了面向对象编程的一些基础知识,本文将继续阐述有关面向对象编程(OOP)技术,包括:

● 接口

● 继承

● 多态

● 对象之间的关系

● 运算符重载

● 事件

● 引用类型和值类型

一.接口

接口是把公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合。一旦定义了接口,就可以在类中实现它。这样,类就可以支持接口所指定的所有属性和成员。

注意,接口不能单独存在。不能像实例化一个类那样实例化接口。另外,接口不能包含实现其成员的任何代码,而只能定义成员本身。实现过程必须在实现接口的类中完成。

一个类可以支持多个接口,多个类也可以支持相同的接口。所以接口的概念让用户和其它开发人员更容易理解其他人的代码。

在发布接口后,即接口可以用于其他开发人员或终端用户后,最好不要修改。

二.继承

继承是OOP最重要的特性之一,任何类都可以从另一个类中继承。在OOP中,被继承(也成为派生)的类称为父类(也称为基类)。注意,C#中的对象仅能直接派生于一个基类,当然基类也可以有自己的基类。

继承性可以从一个较一般基类扩展或创建更多的特定类。在继承一个基类时,成员的可访问性就成了一个重要的问题。派生类不能访问基类的私有成员,但可以访问其公共成员。不过,派生类和外部的代码都可以访问公共成员。为了解决这个问题,C#提供了第三种可访问性:protected,只有派生类才能访问protected成员。对于外部代码来说,这个可访问性与私有成员一样:外部代码不能访问private成员和protected成员。

三.多态性

继承的一个结果是派生于基类的类在方法和属性上有一定的重叠,因此,可以使用相同的语法处理从同一个基类实例化的对象。例如,如果基类Animal有一个EatFood()方法,则从派生于它的类Cow和Chicken中调用这个方法,其语法是类似的:

Cow myCow=new Cow();

Chicken myChicken=new Chicken();

myCow.EatFood();

myChicken.EatFood();

多态性则更进了一步,可以把某个派生类型的变量赋给基本类型的变量,例如:

Animal myAnimal=myCow;

不需要进行强制类型转换,就可以通过这个变量调用基类的方法:

myAnimal.EatFood();

在派生于同一个类的不同对象上执行任务时,多态性是一种极有效的技巧,其使用的代码最少。注意并不是只有共享同一个父类的类才能利用多态性。只要子类和孙子类在继承层次结构中有一个相同的类,它们就可以用同样的方式利用多样性。

还要注意,在C#中,所有的类都派生于同一个类object,object是继承层次结构中的根。所以可以把所有对象看作是object类的实例。这就是在建立字符串时,Console.WriteLine()可以处理无数多种参数组合的原因。第一个参数后面的每个参数都可以看作是一个object实例,所以可以把任何对象的输出结果写到屏幕上。为此,需要调用方法ToString()(object的一个成员),我们可以重写这个方法,为自己的类提供合适的实现代码,或者使用默认实现代码,返回类名(根据它所在的名称空间,返回类的修饰名)。

四、对象之间的关系

继承是对象之间的一种简单关系,可以让派生类完整地获得基类的特性,而派生类也可以访问基类内部的一些工作代码(通过受保护的成员)。对象之间还有其它一些重要关系。

● 包含关系:一个类包含另一个类。这类似于继承关系,但包含类可以控制对被包含类的成员的访问,甚至在使用被包含类的成员前进行其它处理。

●集合关系:一个类作用于另一个类的多个实例的容器。这类似于对象数组,但集合有其它功能,包括索引、排序和重新设置大小等。

五、运算符重载

我们已经知道了如何使用运算符处理简单的变量类型,也可以把运算符用于从类实例化而来的对象,因为类可以包含如何处理运算符的指令。

例如,给Animal添加一个新属性Weight,接着使用下述代码比较家畜的体重:

if(cowA.Weight>cowB.Weight)

{

...

}

使用运算符重载,可以在代码中提供隐式使用Weight属性的逻辑,如下面的代码所示:

if(cowA>cowB)

{

...

}

大于运算符>被重载了。我们为重载运算符编写代码,执行上述操作,这段代码用作类定义的一部分,而该运算符作用于这个类。在上面的示例中,使用了两个Cow对象,所以运算符重载定义包含在Cow类中。也可以重载运算符,以相同的方式处理不同的类,其中一个(或两个)类定义包含达到这一目的的代码。

注意,只能采用这种方式重载现有的C#运算符,不能创建新的运算符。

六、事件

对象可以激活事件,作为它们处理的一部分。事件是非常重要的,可以在代码的其他部分起作用,类似于异常(但功能更强大)。使用事件可以创建事件驱动的应用程序,许多基于Windows的应用程序完全依赖于事件。每个按钮单击或滚动条拖动操作都是通过事件处理实现的,其中事件是通过鼠标或键盘触发的。

七、引用类型和值类型

在C#中,数据根据变量的类型以两种方式中的一种存贮在一个变量中。变量的类型分为两种:引用类型和值类型,其区别如下:

● 值类型在内存的一个地方存储它们自己和它们的内容。

●引用类型存储指向内存中其它某个位置(称为堆)的引用,而在另一个位置存储内容。

实际上,在使用C#时,不必过多地考虑这个问题,对于初学者来说,所使用的string变量(这是引用类型)与使用其他简单变量(大多数是值类型,例如int)的方式完全相同。

----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流!
----------------------

详细请查看:http://edu.csdn.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐