深入剖析C#继承机制1

继承

一. 继承基础知识

  为了提高软件模块的可复用性和可扩充性,以便提高软件的开发效率,我们总是希望能够利用前人或自己以前的开发成果,同时又希望在自己的开发过程中能够有足够的灵活性,不拘泥于复用的模块。C#这种完全面向对象的程序设计语言提供了两个重要的特性--继承性inheritance 和多态性polymorphism。

  继承是面向对象程序设计的主要特征之一,它可以让您重用代码,可以节省程序设计的时间。继承就是在类之间建立一种相交关系,使得新定义的派生类的实例可以继承已有的基类的特征和能力,而且可以加入新的特性或者是修改已有的特性建立起类的新层次。

  现实世界中的许多实体之间不是相互孤立的,它们往往具有共同的特征也存在内在的差别。人们可以采用层次结构来描述这些实体之间的相似之处和不同之处。

图1 类图

  上图反映了交通工具类的派生关系。最高层的实体往往具有最一般最普遍的特征,越下层的事物越具体,并且下层包含了上层的特征。它们之间的关系是基类与派生类之间的关系。

  为了用软件语言对现实世界中的层次结构进行模型化,面向对象的程序设计技术引入了继承的概念。一个类从另一个类派生出来时,派生类从基类那里继承特性。派生类也可以作为其它类的基类。从一个基类派生出来的多层类形成了类的层次结构。

  注意:C#中,派生类只能从一个类中继承。这是因为,在C++中,人们在大多数情况下不需要一个从多个类中派生的类。从多个基类中派生一个类这往往会带来许多问题,从而抵消了这种灵活性带来的优势。
C#中,派生类从它的直接基类中继承成员:方法、域、属性、事件、索引指示器。除了构造函数和析构函数,派生类隐式地继承了直接基类的所有成员。看下面示例:
using System ;
class Vehicle //定义交通工具(汽车)类
{
protected int wheels ; //公有成员:轮子个数
protected float weight ; //保护成员:重量
public Vehicle( ){;}
public Vehicle(int w,float g){
wheels = w ;
weight = g ;
}
public void Speak( ){
Console.WriteLine( "交通工具的轮子个数是可以变化的! " ) ;
}
} ;
class Car:Vehicle //定义轿车类:从汽车类中继承
{
int passengers ; //私有成员:乘客数
public Car(int w , float g , int p) : base(w, g)
{
wheels = w ;
weight = g ;
passengers=p ;
}
}

  Vehicle 作为基类,体现了"汽车"这个实体具有的公共性质:汽车都有轮子和重量。Car 类继承了Vehicle 的这些性质,并且添加了自身的特性:可以搭载乘客。

时间: 2024-09-12 07:40:28

深入剖析C#继承机制1的相关文章

深入剖析C#继承机制(1)

继承 内容导航 一.继承基础知识 二.C#的继承规则 三. 访问与隐藏基类成员 四.多级继承 五.继承与访问修饰符 一. 继承基础知识 为了提高软件模块的可复用性和可扩充性,以便提高软件的开发效率,我们总是希望能够利用前人或自己以前的开发成果,同时又希望在自己的开发过程中能够有足够的灵活性,不拘泥于复用的模块.C#这种完全面向对象的程序设计语言提供了两个重要的特性--继承性inheritance 和多态性polymorphism. 继承是面向对象程序设计的主要特征之一,它可以让您重用代码,可以节

深入剖析C#继承机制(2)

继承 四.多级继承 一些面向对象语言允许一个类从多个基类中继承,而另一些面向对象语言只允许从一个类继承,但可以随意从几个接口或纯抽象类中继承. 只有C++支持多级继承,许多程序员对此褒贬不一.多级继承常会引起继承来的类之间的混乱,继承而来的方法往往没有唯一性,所以C#中类的继承只可以是一个,即子类只能派生于一个父类,而有时你必须继承多个类的特性,为了实现多重继承必须使用接口技术,下面是对接口的多重继承进行介绍: using System ;//定义一个描述点的接口interface IPoint

深入剖析C#继承机制6

继承 五.继承与访问修饰符 访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性.类的继承中有四个访问修饰符: public protected internal private.使用这些访问修饰符可指定下列五个可访问性级别: public protected internal internal protected private. 声明的可访问性 意义 public 访问不受限制. protected 访问仅限于包含类或从包含类派生的类型. internal 访问仅限于当前项目. pro

深入剖析C#继承机制7

继承 3.继承中对使用可访问性级别的限制 声明类型时,最重要的是查看该类型是否必须"至少"与其他成员或类型"具有同样的可访问性".例如,直接基类必须至少与派生类具有同样的可访问性.以下声明将导致编译器错误,因为基类 BaseClass 的可访问性小于 MyClass: class BaseClass {...}public class MyClass: BaseClass {...} // Error 下表汇总了对使用声明的可访问性级别的限制. 上下文 备注 类 类

深入剖析C#继承机制2

继承 二.C#中的继承符合下列规则: 1.继承是可传递的.如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员.Object 类作为所有类的基类. 2.派生类应当是对基类的扩展.派生类可以添加新的成员,但不能除去已经继承的成员的定义. 3.构造函数和析构函数不能被继承.除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承.基类中成员的访问方式只能决定派生类能否访问它们. 4.派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员.但这并

深入剖析C#继承机制3

继承 三. 访问与隐藏基类成员 (1) 访问基类成员 通过base 关键字访问基类的成员: 调用基类上已被其他方法重写的方法. 指定创建派生类实例时应调用的基类构造函数. 基类访问只能在构造函数.实例方法或实例属性访问器中进行. 从静态方法中使用 base 关键字是错误的. 示例:下面程序中基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法.通过使用 base 关键字,可以从派生类中调用基类上的 Getinfo 方法. using System ;public

深入剖析C#继承机制5

继承 四.多级继承 一些面向对象语言允许一个类从多个基类中继承,而另一些面向对象语言只允许从一个类继承,但可以随意从几个接口或纯抽象类中继承. 只有C++支持多级继承,许多程序员对此褒贬不一.多级继承常会引起继承来的类之间的混乱,继承而来的方法往往没有唯一性,所以C#中类的继承只可以是一个,即子类只能派生于一个父类,而有时你必须继承多个类的特性,为了实现多重继承必须使用接口技术,下面是对接口的多重继承进行介绍: using System ;//定义一个描述点的接口interface IPoint

深入剖析C#继承机制4

继承 2) 隐藏基类成员 想想看,如果所有的类都可以被继承,继承的滥用会带来什么后果?类的层次结构体系将变得十分庞,大类之间的关系杂乱无章,对类的理解和使用都会变得十分困难.有时候,我们并不希望自己编写的类被继承.另一些时候,有的类已经没有再被继承的必要.C#提出了一个密封类(sealed class)的概念,帮助开发人员来解决这一问题. 密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承.如果试图将一个密封类作为其它类的基类,C#将提示出错.理所当然,密封类不能同时又是抽象

JavaScript学习:基础继承机制

javascript|继承 最近因为学校做网站设计,所以一直在ASP上和数据库上大费苦心. 我在前一个阶段是做Java程序设计的.突然接到任务并学习ASP,所以我一直都热忠并善于利用javascript来构架ASP程序. javascript的一个明显的优点就在于它可以定义和持有自己的对象.这一点好象是VBScript所无法比拟的. 有了这一点,可以利用javascript进行更接近于面向对象的程序设计.也许这将使网站开发更有乐趣... 但有个严重的缺点!javascript不支持继承机制.不象