c#高階之路——9.c# 抽象類
基礎:
抽象類 abstract class
抽象類理解為一種特殊的基礎類,它不與具體的事物直接產生聯絡。
形式上,用abstract關鍵字修飾的類即為抽象類。其最大的特點是不能被例項化,只能作為派生類的基類。
1、乙個抽象類可以同時包含抽象方法和非抽象方法。
2、抽象方法只在派生類中真正實現,抽象類中的抽象方法只存放函式原型,不涉及主體**,
3、派生自抽象類的類需要實現其基類的抽象方法,才能例項化物件。
4、使用override關鍵子可在派生類中實現抽象方法,經override宣告的方法即為重寫基類方法,其簽名必須與override方法的簽名相同。
注意:抽象類不能被例項化,他只能作為其他類的基礎類。比如,類的層次結構中並沒有「圖形」這樣的具體事物,將「圖形」定義為抽象類,便可以派生出「圓形」和「四邊形」這樣一些可以被具體例項化的普通類。
可以在抽象類中使用關鍵字absract定義抽象方法,並要求所有的派生非抽象類都要過載實現抽象方法。引入抽象方法的原因在於抽象類本身是一種抽象概念,有的方法並不需要具體實現,而是留下來讓派生類過載實現。
比如:圖形抽象類和圓形和正方形具體類,以及計算面積抽象方法。
public absract class shape
抽象方法為:
public absract double getarea();
則派生類過載實現為:
public override double getarea();
高階:
示例:圖形抽象類和圓形和正方形具體類,以及計算面積抽象方法過載實現。
在工程檔案中新增乙個類 shape類——shape.cs
using system;
using system.collections.generic;
using system.linq;
using system.text;
//定義基類shape
public abstract class shape
protected string color;
public shape() //建構函式
public shape(string color)
public string getcolor()
public abstract double getarea(); //抽象類
//定義cirle類,從shape類中派生
public class circle : shape
private double radius;
public circle(string color, double radius)
this.color = color;
this.radius = radius;
public override double getarea()
return system.math.pi * radius * radius;
//派生類rectangular,從shape類中派生
public class retangular : shape
protected double length, width;
public retangular(string color, double length, double width)
this.color = color;
this.length = length;
this.width = width;
public override double getarea()
return (length*width);
public double perimeteris()
return (2 * (length * width));
//派生類square,從retangular類中派生
public class square : retangular
public square(string color,double side):base(color,side,side)
在主程式中設定引數並呼叫執行——program.cs
using system;
using system.collections.generic;
using system.linq;
using system.text;
class program
static void main(string args)
circle cir = new circle("orange", 3.0);
console.writeline("circle area is",cir.getcolor(),cir.getarea());
retangular rect = new retangular("red",13.0,2.0);
console.writeline("retangular color is ,rectangualr area is ,rectangualr perimeter is ",
rect.getcolor(),rect.getarea(),rect.perimeteris());
square squ = new square("qreen",5.0);
console.writeline("square color is ,square area is ,square perimeter is ",squ.getcolor(),squ.getarea(),squ.perimeteris());
控制台輸出
9 C 類建構函式
類建構函式 前言,定義,基類與派生類,設計指導 1.前言 大部分物件在使用之前沒有正確的初始化是c 出錯的主要領域 引入類的建構函式是正確的初始化類的物件 一般什麼時候觸發並呼叫類的建構函式呢?答案是 當我們用類來定義乙個類變數的時候,如 class demo 宣告並定義好完整的類 當我們用類去建立...
C 抽象類總結
c 抽象類總結 1 解釋什麼是抽象類?抽象類是包含抽象方法的類。那麼什麼又是抽象方法呢?抽象方法是沒有方法內容的,只有乙個方法名和引數列表的方法。並以 結尾。為了標註他的與眾不同,在他的返回型別前加abstract 並在class 前加abstract 簡言之,由abstract 修飾的方法和類就是...
C 基礎 抽象類
下面,我們舉乙個完整的例子 例11 22 include class cpolygon virtual int area void 0 class crectangle public cpolygon class c public cpolygon int main 本程式計算本輸出矩形和三角形的面...