码迷,mamicode.com
首页 > Windows程序 > 详细

C# 抽象类

时间:2015-05-05 19:08:06      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

有时候,基类并不与具体的事物相联系,而是只表达一种抽象的概念,用以为它的派生类提供一个公共的界面。为此,C#中引入了抽象类(abstract class)的概念。
 
注意:C++程序员在这里最容易犯错误。C++中没有对抽象类进行直接声明的方法,而认为只要在类中定义了纯虚函数,这个类就是一个抽象类。纯虚函数的概念比较晦涩,直观上不容易为人们接受和掌握,因此C#抛弃了这一概念。
 
抽象类使用abstract修饰符,对抽象类的使用有以下几点规定:
 
●抽象类只能作为其它类的基类,它不能直接被实例化,而且对抽象类不能使用new操作符。抽象类如果含有抽象的变量或值,则它们要么是null类型,要么包含了对非抽象类的实例的引用。
 
●抽象类允许包含抽象成员,虽然这不是必须的。
 
●抽象类不能同时又是密封的。
 
如果一个非抽象类从抽象类中派生,则其必须通过重载来实现所有继承而来的抽象成员,请看下面的示例:
 
abstruct class A
{
public abstruct void F();
}
abstract class B:a
{
public void G(){}
}
class C:B
{
public override void F(){
//F的具体实现代码
}
}
抽象类A提供了一个抽象方法F。类B从抽象类A中继承,并且又提供了一个方法G;因为B中并没有包含对F的实现,所以B也必须是抽象类。类C是从类B中继承,类中重载了抽象方法F,并且提供了对F的具体实现,则类C允许是非抽象的。
 
让我们继承研究汽车类的例子。我们从“交通工具”这个角度来理解Vehicle类的话,它应该表达一种抽象的概念,我们可以把它定义为抽象类。由轿车类Car和卡车类Truck来继承这个抽象类,它们作为可以实例化的类。
 
程序清单14-5:
 
using System;
abstract class Vehicle //定义汽车类
{
 public int wheels; //公有成员:轮子个数
 protected float weight; //保护成员:重量
 public Vehicle(int w,float g){
     wheels=w;
     weight=g;
 }
 public virtual void Speak(){
     Console.WriteLine("the w vehicle is speaking!");
 }
};
 
class Car:Vehicle //定义轿车类
{
 int passengers; //私有成员:乘客数
 public Car(int w,float g,int p):base(w,g)
 {
    wheels=w;
    weight=g;
    passengers=p;
 }
 public override void Speak(){
    Console.WriteLine("The car is speaking:Di-di!");
   }
}
 
class Truck:Vehicle //定义卡车类
{
 int passengers; //私有成员:乘客数
 float load; //私有成员:载重量
 public Truck(int w,float g,int p,float l):base(w,g)
 {
    wheels=w;
    weight=g;
    passengers=p;
    load=l;
 }
 public override void Speak(){
    Console.WriteLine("The truck is speaking:Ba-ba!");
 }
}

C# 抽象类

标签:

原文地址:http://www.cnblogs.com/zcf09/p/4479546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!