C virtual關鍵字的用法和宣告

2021-10-08 14:36:03 字數 1621 閱讀 5964

virtual 關鍵字用於修改方法、屬性、索引器或事件宣告,並使它們可以在派生類中被重寫。 例如,此方法可被任何繼承它的類替代:

public virtual double area()

虛擬成員的實現可由派生類中的替代成員更改。

備註呼叫虛擬方法時,將為替代的成員檢查該物件的執行時型別。 將呼叫大部分派生類中的該替代成員,如果沒有派生類替代該成員,則它可能是原始成員。

預設情況下,方法是非虛擬的。 不能替代非虛方法。

virtual 修飾符不能與 static、abstract, private 或 override 修飾符一起使用。 以下示例顯示了虛擬屬性:

class mybaseclass

// ordinary virtual property with backing field

private int num;

public virtual int number

set

}

class myderivedclass : mybaseclass

setelse}}

}除宣告和呼叫語法不同外,虛擬屬性的行為與抽象方法相似。

在靜態屬性上使用 virtual 修飾符是錯誤的。

通過包括使用 override 修飾符的屬性宣告,可在派生類中替代虛擬繼承屬性。

示例在該示例中,shape 類包含 x、y 兩個座標和 area() 虛擬方法。 不同的形狀類(如 circle、cylinder 和 sphere)繼承 shape 類,並為每個圖形計算表面積。 每個派生類都有各自的 area() 替代實現。

請注意,繼承的類 circle``sphere 和 cylinder 均使用初始化基類的建構函式,如下面的宣告中所示。

public cylinder(double r, double h): base(r, h) {}

根據與方法關聯的物件,下面的程式通過呼叫 area() 方法的相應實現來計算並顯示每個物件的相應區域。

class testclass

public shape(double x, double y)

public virtual double area()

}public class circle : shape

public override double area()

}class sphere : shape

public override double area()

}class cylinder : shape

public override double area()

}static void main()

", c.area());

console.writeline("area of sphere = ", s.area());

console.writeline("area of cylinder = ", l.area());

}}/*

output:

area of circle = 28.27

area of sphere = 113.10

area of cylinder = 150.80

*/

C virtual關鍵字理解

在c 語言中,從 到程式的執行,要經歷編譯和連線,針對這兩個不同的階段,c 設計了不同的機制,其中vitual和inline就是區分編譯器工作和鏈結器工作的標誌 inline很容易理解,生命為inline的函式在編譯階段即被展開成 而非inline的函式採用執行時鏈結的方式處理 vitual關鍵字,...

C virtual關鍵字理解

在c 語言中,從 到程式的執行,要經歷編譯和連線,針對這兩個不同的階段,c 設計了不同的機制,其中vitual和inline就是區分編譯器工作和鏈結器工作的標誌 inline很容易理解,生命為inline的函式在編譯階段即被展開成 而非inline的函式採用執行時鏈結的方式處理 vitual關鍵字,...

C virtual關鍵字理解

在c 語言中,從 到程式的執行,要經歷編譯和連線,針對這兩個不同的階段,c 設計了不同的機制,其中vitual和inline就是區分編譯器工作和鏈結器工作的標誌 inline很容易理解,生命為inline的函式在編譯階段即被展開成 而非inline的函式採用執行時鏈結的方式處理 vitual關鍵字,...