快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

下载澳门新葡亰官网App_龟发之家论坛



内容导航

一、承袭根基常识

二、C#的承袭规则

三. 造访与暗藏基类成员

四、多级承袭

五、承袭与造访修饰符

一. 承袭根基常识

为了前进软件模块的可复用性和可扩充性,以便前进软件的开拓效率,我们老是盼望能够使用昔人或自己曩昔的开拓成果,同时又盼望在自己的开拓历程中能够有足够的机动性,不拘泥于复用的模块。C#这种完周全向工具的法度榜样设计说话供给了两个紧张的特点--承袭性inheritance 和多态性polymorphism。

承袭是面向工具法度榜样设计的主要特性之一,它可以让您重用代码,可以节省法度榜样设计的光阴。承袭便是在类之间建立一种订交关系,使得新定义的派生类的实例可以承袭已有的基类的特性和能力,而且可以加入新的特点或者是改动已有的特点建立起类的新层次。

现实天下中的许多实体之间不是互相伶仃的,它们每每具有合营的特性也存在内在的区别。人们可以采纳层次布局来描述这些实体之间的相似之处和不合之处。

图1 类图

上图反应了交通对象类的派生关系。最高层的实体每每具有最一样平常最普遍的特性,越下层的事物越详细,并且下层包孕了上层的特性。它们之间的关系是基类与派生类之间的关系。

为了用软件说话对现实天下中的层次布局进行模型化,面向工具的法度榜样设计技巧引入了承袭的观点。一个类从另一个类派生出来时,派生类从基类那里承袭特点。派生类也可以作为其它类的基类。从一个基类派生出来的多层类形成了类的层次布局。

留意:C#中,派生类只能从一个类中承袭。这是由于,在C++中,人们在大年夜多半环境下不必要一个从多个类中派生的类。从多个基类中派生一个类这每每会带来许多问题,从而抵消了这种下载澳门新葡亰官网App机动性带来的上风。

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 ; //下载澳门新葡亰官网App私有成员:游客数

public Car(int w , float g , int p) : base(w, g)

{

wheels = w ;

weight = g ;

passengers=p ;

}

}

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

二、C#中的承袭相符下列规则:

1、承袭是可通报的。假如C从B中派生,B又从A中派生,那么C不仅承袭了B中声明的成员,同样也承袭了A中的成员。Object 类作为所有类的基类。

2、派生类该当是对基类的扩展。派生类可以添加新的成员,但不能撤除已经承袭的成员的定义。

3、构造函数和析构函数不能被承袭。除此以外的其它成员,不论对它们定义了如何的造访要领,都能被承袭。基类中成员的造访要领只能抉择派生类能否造访它们。

4、派生类假如定义了与承袭而来的成员同名的新成员,就可以覆盖已承袭的成员。但这并不由于这派生类删除了这些成员,只是不能再造访这些成员。

5、类可以定义虚措施、虚属性以及虚索引唆使器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。

6、派生类只能从一个类中承袭,可以经由过程接吕实现多重承袭。

下面的代码是一个子类承袭父类的例子:

using System ;

public class ParentClass

{

public ParentClass( )

{ Console.WriteLine("父类构造函数。"); }

public void print( )

{ Console.WriteLine("I'm a Parent Class。") ; }

}

public class ChildClass : ParentClass

{

public ChildClass( )

{ Console.WriteLine("子类构造函数。") ; }

public static void Main( ) {

ChildClass child = new ChildClass( ) ;

child.print( ) ;

}

}

法度榜样运行输出:

父类构造函数。子类构造函数。I'm a Parent Class。

上面的一个类名为ParentClass, main函数顶用到的类名为ChildClass。要做的是创建一个应用父类ParentClass现有代码的子类ChildClass。

1.首先必须阐明P下载澳门新葡亰官网ApparentClass是ChildClass的基类。

这是经由过程在ChildClass类中作出如下阐明来完成的:"public class ChildClass 下载澳门新葡亰官网App: ParentClass"。在派生类标识符后面,用分号":" 来注解后面的标识符是基类。C#仅支持单一承袭。是以,你只能指定一个基类。

2.ChildClass的功能险些等同于ParentClass。

是以,也可以说ChildClass "便是" ParentClass。在ChildClass 的Main( )措施中,调用print( ) 措施的结果,就验证这一点。该子类并没有自己的print( )措施,它应用了ParentClass中的 print( )措施。在输出结果中的第三行可以获得验证。

3.基类在派生类初始化之前自动进行初始化。ParentClass 类的构造函数在ChildClass的构造函数之前履行

三. 造访与暗藏基类成员

(1) 造访基类成员

经由过程base 关键字造访基类的成员:

调用基类上已被其他措施重写的措施。

指定创建派生类实例时应调用的基类构造函数。

基类造访只能在构造函数、实例措施或实例属性造访器中进行。

从静态措施中应用 base 关键字是差错的。

示例:下面法度榜样中基类 Person 和派生类 Employee 都有一个名为 Getinfo 的措施。经由过程应用 base 关键字,可以从派生类中调用基类上的 Getinfo 措施。

using System ;

public class Person

{

protected string ssn = "111-222-333-444" ;

protected string name = "张三" ;

public virtual void GetInfo() {

Console.WriteLine("姓名: {0}", name) ;

Console.WriteLine("编号: {0}", ssn) ;

}

}

class Employee: Person

{

public string id = "ABC567EFG23267" ;

public override void GetInfo() {

// 调用基类的GetInfo措施:

base.GetInfo();

Console.WriteLine("成员ID: {0}", id) ;

}

}

class TestClass {

public static void Main() {

Employee E = new Employee() ;

E.GetInfo() ;

}

}

法度榜样运行输出:

姓名: 张三

编号: 111-222-333-444

成员ID: ABC567EFG23267

示例:派生类同基类进行通信。

using System ;

public class Parent

{

string parentString;

public Parent( )

{ Console.WriteLine("Parent Constructor.") ; }

public Parent(st下载澳门新葡亰官网Appring myString) {

parentString = myString;

Console.WriteLine(parentString) ;

}

public void

您可能还会对下面的文章感兴趣: