我正確的聲明一個方法abstract
自動使它虛擬?抽象方法是虛擬的嗎?
也就是說,在子類中,我可以重寫它多次,並且在運行時,與該對象的運行時類型對應的方法將被調用?
是否可以聲明一個抽象的非虛方法?也就是說,這個方法必須在非抽象的子類中實現並且不能被覆蓋?
我正確的聲明一個方法abstract
自動使它虛擬?抽象方法是虛擬的嗎?
也就是說,在子類中,我可以重寫它多次,並且在運行時,與該對象的運行時類型對應的方法將被調用?
是否可以聲明一個抽象的非虛方法?也就是說,這個方法必須在非抽象的子類中實現並且不能被覆蓋?
是的,abstract methods are virtual的定義;它們必須被重寫的實際子類可重寫:
當一個實例方法聲明包含
abstract
改性劑,該方法被認爲是一個抽象方法。儘管抽象方法隱含地也是虛擬方法,但它不能具有修飾符virtual
。
相反,你不能聲明一個抽象的非虛擬方法,因爲如果可以的話,你會有一個方法無法實現,因此永遠無法調用,使得它無用。
不過,如果你想有一個類實現一個抽象方法,但不允許任何它的子類來修改它的實現,這就是sealed
進來一個例子:
abstract public class AbstractClass
{
abstract public void DoSomething();
}
public class BaseClass : AbstractClass
{
public sealed override void DoSomething()
{
Console.WriteLine("Did something");
}
}
注意的是,雖然抽象方法(隱含地)是虛擬的,具體基類中的實現是非虛擬的(因爲關鍵字sealed
)。
是的,它們是虛擬的。否則,你將無法爲它們編寫實現。
可能的[C#中的每個抽象函數都是虛擬的,一般來說都是重複的嗎?](http://stackoverflow.com/questions/391557/is-every-abstract-function-virtual-in-c-in-general) –