C 的關鍵字系列 2 of n

2021-09-06 06:52:29 字數 2607 閱讀 6200

用於修飾類,方法,屬性和字段的關鍵字:

首先從最簡單的private,protected,internal,public解釋。

public 和internal 修飾類。

public,protected,private 修飾方法。

修飾類的時候:

public 代表公開,也就是所有程式集都可以訪問這個類。

internal 代表內部的,也就是只有在同一程式集中才能訪問這個類,一般而言同一程式集就是同乙個dll。

修飾方法的時候:

public 代表公開,也就是所有的類都可以訪問這個方法。

protected 代表受保護的,也就是只有我的子類才能訪問這個方法。

private 代表私有的,也就是只有我才能訪問這個方法。

接著我們來討論下const,readonly的區別:

首先兩者都是常量,不同的是const 是編譯時常量,readonly是執行時常量

編譯時常量:在編譯的時候,值就已經是常量了,任何使用該變數的地方都會被替換成常量值。

執行時常量:在執行的時候,值不能夠被修改。

ok,現在我們討論下abstract, virtual , new , override關鍵字:

首先abstract代表的是抽象,abstract 可以修飾類和方法。

修飾類的時候:

這個時候叫做抽象類,抽象類有下列性質:

修飾方法的時候:

這個時候叫做抽象方法,性質如下:

virtual關鍵字代表虛擬的,虛的,修飾的是方法。

修飾方法的時候:

這個時候叫做虛方法,虛方法代表這個方法是虛的,這個方法可能沒有實現,這個方法可以被重寫。

關鍵的一句話是:這個方法可以被重寫。

這代表,如果這個方法想要被重寫,被override,那麼它就必須是乙個虛方法,因為abstract修飾的方法是隱式的虛方法,所以abstract和virtual 修飾的方法可以被override。

override關鍵字代表重寫,修飾的是方法。

override 方法提供從基類繼承的成員的新實現。 由 override 宣告重寫的方法稱為重寫基方法。 重寫的基方法必須與 override 方法具有相同的簽名。

修飾方法的時候:

1:不能重寫非虛方法或靜態方法。 重寫的基方法必須是 virtual、abstract 或 override 的。

override 方法和 virtual 方法必須具有相同的訪問級別修飾符。

2:您不能使用 new、static 或 virtual 修飾符來修改 override 方法。

3:重寫屬性宣告必須指定與繼承屬性完全相同的訪問修飾符、型別和名稱,並且被重寫的屬性必須

是 virtual、abstract 或 override 的。

new關鍵字代表隱藏,修飾的是方法。

new 和override 的區別是,new 是隱藏父類方法,這就好比告訴別人,這個方法和父類的方法是兩個不同的方法,只是他們的簽名剛好相同罷了,override 則不同,override 告訴別人,以後用我的instance呼叫的就是我的方法,用父類的instance呼叫的就是父類的方法。

總結下:abstract,virtual,override,new 的關係。

override 的方法必須是abstract ,virtual, override 的。

abstract 的方法是隱式的virtual 方法。

virtual 的方法代表這個方法可以被重寫,當然你也可以不重寫它。

abstract的方法代表這個方法是必須被重寫的方法。

new 的方法代表這個方法和父類的沒關係,是乙個新的「new」 方法,只是剛好簽名相同罷了。

最後一道題: 

virtual and override

class a

}class b : a

}class c : b

}class d : c

}class program2

}

具體分析在這裡:

C語言系列 關鍵字

從接觸c語言到現在也有好幾年了,這個在閱讀esc32原始碼的時候感覺自己差的還是很多的。裡面運用的大量的巨集定義,這樣就加大的閱讀的難度,但是這樣就大大方便的維護,這應該是乙個平衡問題吧。今天就c語言關鍵字簡單的總結一下,試問 c語言有多少個關鍵字呢?關鍵字 意義 auto 宣告自動變數,預設使編譯...

C 的關鍵字

c 的關鍵字 auto 宣告自動變數,一般不使用 bool 宣告乙個布林型變數 break 跳出當前迴圈 asm 插入乙個彙編指令 case 開關語句分支 catch 處理throw產生的異常 char 宣告乙個字元弄變數 class const 宣告乙個常量 const case 從乙個const...

C語言中的關鍵字(2)

struct union enum typedef 各種資料型別的集合 打包封裝 struct personmyson person是乙個新的型別,不是乙個變數名,相當與struct person struct person myson 1.整體空間是占用空間的最大成員 的型別 所佔位元組數的整數倍...