C#物件導向名詞比較重寫(override)與重載(overload)
相似:他們都是重新定義一個方法的實現過程
區別:
重寫(override):是指對象之間的某個方法的重新實現,在一個類繼承一個類時,當基類中某方法申明為virtual或abstract時,在衍生類別中使用override關鍵字重新申明一個方法,注意該方法必須與基類中的參數傳回值一樣,一個類中對於基類某方法只能重寫一次,調用基類還是衍生類別的實現是通過所定義的對象的類型來決定,和方法的參數無關
重載(overload):指對象中某個方法的重新實現,方法重載不需要關鍵字,只需要申明方法的參數類型或個數不一樣即可,重載不能根據傳回型別不同來重載,重載可以重載任意多次,沒有限制.調用哪個重載方法只和調用時的參數有關係
================
(抽象)abstract和虛擬(virtual)
相似:在申明方法的時候,都能被重寫
區別:
(抽象)abstract:可以申明類也可以申明方法,申明方法時不能和sealed一起申明,所申明的類必須被繼承,申明的方法也必須被重寫,申明時沒有具體實現,實際上它起一個介面的作用
虛擬(virtual):只能申明方法,可以在申明方法的時候寫對應的實現
======================
類(class)和結構(struct)
相似:都是對象,就單個對象來說,類能實現的幾乎結構都能實現
區別:
類:能被繼承重寫,可以有修飾申明(abstract,sealed),類執行個體化時使用的是棧中的記憶體(相對堆慢一點),類在賦值時,只是引用賦值(賦值後,改變被賦值對象的屬性,其他跟著改)
結構:不能繼承重寫,不能有修飾,執行個體化使用的是堆中的記憶體(和普通變數一樣),是值賦值
==========================
常數(const )和唯讀(readonly)
相似:相對於變數,其值基本不變
區別:
常數(const ):其值為寫入程式碼,其值只能在申明時賦值,在類中使用const申明時,const好像隱式靜態變數,每個執行個體不需要儲存副本
唯讀(readonly):其值可以賦值,但只能在建構函式中賦值或申明時指定,申明為readonly的變數,每個類執行個體中可以有不同的副本