C 抽象方法和虛方法的區別

2022-09-18 15:54:17 字數 939 閱讀 3331

虛方法和抽象方法都可以供派生類重寫,它們之間區別如下:

1. 虛方法必須有實現部分,抽象方法沒有提供實現部分,抽象方法是一種強制派生類覆蓋的方法,否則派生類將不能被例項化。如:

//抽象方法

public abstract class animal

//虛方法

public class animal

public virtual void eat(){}

}2.抽象方法只能在抽象類中宣告,虛方法不是。其實如果類包含抽象方法,那麼該類也是抽象的,也必須宣告為抽象的。如:

public class animal

編譯器會報錯:

main.cs(10): 'vstest.animal.sleep()' is abstract but it is contained in nonabstract class 'vstest.animal'

main.cs(11): 'vstest.animal.eat()' is abstract but it is contained in nonabstract class 'vstest.animal'

3. 抽象方法必須在派生類中重寫,這一點跟介面類似,虛方法不必。如:

public abstract class animal

public class cat : animal

// we need implement animal.eat() here

}編譯器會報錯:main.cs(14): 'vstest.cat' does not implement inherited abstract member 'vstest.animal.eat()',因為我們沒有實現抽象類中所有抽象方法。

4.虛方法可以實現多型,而抽象方法不行。

虛方法和抽象方法的區別

虛方法 就是以virtual關鍵字修飾並在乙個或多個派生類中實現的方法。如果乙個方法被virtual標記,則不可再被static abstract和override修飾。抽象方法 是以abstract關鍵字修飾的方法,抽象方法可以看做是沒有實現體的虛方法,並且必須在派生類中被重寫,如果乙個類包括抽象...

C 虛方法和抽象方法

虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...

C 虛方法和抽象方法

虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...