程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#的抽象類

C#的抽象類

編輯:關於C語言

有時候,基類並不與具體的事物相聯系,而是只表達一種抽象的概念,用以為它的派生類提供一個公共的界面。為此,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!");
  }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved