虛方法:這個方法其實就是為了重寫方法而存在的(在宣告中包含virtual關鍵字),否則沒感覺到它存在的意義。
其一:因為要重寫所以它的訪問型別如果為private則毫無意義阻礙了重寫動作的進行也就是它不能私有化,所以c#中virtual關鍵字和private關鍵字不能同時使用。
其二:因為靜態的方法和抽象方法不能重寫,同理c#中static,abstract關鍵字和virtual關鍵字不能同時使用。
其三:不能在宣告虛方法的同時指定重寫虛方法,因為重寫方法只能重寫基類的虛方法,也就是要提前在基類中宣告虛方法,所以virtual關鍵字和override關鍵字不能同時使用。
重寫方法:就是使從基類繼承的虛方法提供新的實現(使用關鍵字override宣告),從而為其子類所專有化。
同上面的思路一樣:因為靜態的方法和抽象方法不能重寫,同理c#中static,abstract,new關鍵字和override關鍵字不能同時使用。
總結用法如下:
非虛方法的實現(全部隱藏的虛方法)最初宣告的是什麼類的方法就永遠是什麼類的方法。
虛方法的實現:最終是什麼型別的方法就呼叫該型別的方法。
(含有隱藏的)虛方法的實現:最終是什麼型別的方法就呼叫(最靠近)該型別的方法。
注:在派生類中重寫基類中的虛方法時,可以使用base關鍵字呼叫基類中的虛方法。
相關理解程式如下:
1namespace
classab211
public void fun2(a a)
1216}17
class program:a
1823
static void main(string args)
2431}32
*/33
/*34
public abstract class a
3540
public virtual void fun()
4144}45
46class program :a
4752
public new void fun()
5356
static void main(string args)
5762}63
*/64
65class
baseclass
6671}72
class
program:baseclass
7380
static
void main(string
args)
81
86 }
c 有關虛方法要知道的知識點
虛方法 這個方法其實就是為了重寫方法而存在的 在宣告中包含virtual關鍵字 否則沒感覺到它存在的意義。其一 因為要重寫所以它的訪問型別如果為private則毫無意義阻礙了重寫動作的進行也就是它不能私有化,所以c 中virtual關鍵字和private關鍵字不能同時使用。其二 因為靜態的方法和抽象...
面試Flask需要知道的知識點
class regexurl baseconverter def init self,url map,args super regexurl,self init url map self.regex args 0 第二步 把正則類賦值給我們定義的正則規則。re regexurl 第三步 在url中使...
C 中有關map知識點
map是c 一種關聯容器。下面從構造 刪除 新增 查詢和其它操作做簡單介紹。1 構造 mapmap map1 1 map1 1 1 2 map1.insert pair int,int 1,1 3 map1.insert map value type 1,1 3 刪除 map map1 map.er...