C 高階之路 9 C 抽象類

2022-02-06 10:54:20 字數 3120 閱讀 4051

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 本程式計算本輸出矩形和三角形的面...