一、隱藏基類方法:new
class mybase
}class mysub : mybase
}
二、重寫基類方法 virtual override
// 將父類方法標記為virtual,表示可以被重寫
// 將子類方法標記為override,表示為重寫基類方法
class usblei
}class usb燈:usblei
}class iphone : usblei
}class udisk : usblei
}
隱藏基類 與 重寫基類 的前提: 是子類繼承父類,且有相同的方法(非過載)
有關new 與 override的區別:new為隱藏基類方法,看實際定義型別來決定呼叫方法;override 為重寫基類方法,呼叫最新方法。父類方法中沒有加 virtual修飾符,則子類不能加 override修飾符對父類方法進行重寫。
如:usblei usblight = new usb燈();
usblight.usb();
usblei usbiphone = new iphone();
usbiphone.usb();
usblei usbdisk = new udisk();
usbdisk.usb();
console.readkey();
執行結果為:
燈亮了充電了
傳資料mybase mb = new mysub()
mb.func();
執行結果為:
俺是父類
mysub sb =new mysub()
sb.func()
執行結果為:
俺是子類
三、多型的前提:繼承 與 黎克特制轉換原則。
四、抽象方法 abstract :不用寫方法體,或者根本不知道怎麼寫方法體;沒有方法體,就沒有大括號。
1、抽象方法必須存在於抽象類中,抽象類不能例項化。
2、抽象方法的定義: 訪問修飾符一般是public,不允許private;
方法是可以帶引數。public abstract void func();
3、子類必須實現父類的所有抽象方法,除非子類也是抽象類;其實現方法為:
public override void func()
console.writeline("實現了父類的抽象方法");
4、class mysub:mybse游標在此處時,按下shift + alt + f10 再敲回車,自動補全子類實現基類的抽象方法。
五、抽象類:
1、不能例項化;
2、抽象類就是一般類多了幾個抽象的成員;
3、定義:
abstract class myabs
public abstract void func();
//凡是與方法有關的都可以作為抽象成員
//以下是四種抽象成員
//可讀可寫的抽象屬性
public abstract string name //如果不加abstract ,則為預設屬性
get;
set;
public abstract string name
get;
public abstract string name
get;
//索引器(帶引數的屬性)、事件的宣告(乙個私有的委託變數加上兩個方法,類似於字段與屬性的關係)
4、子類的實現**如下:
class mysub : myabs
public override string name
public override string name1
}public override string name2
}}
c 基礎加強 多型II 介面
介面的定義 把公共例項 非靜態 方法和屬性組合起來,以封裝特定功能的乙個集合。介面的成員只能包含 方法 屬性 索引 事件宣告。介面的成員沒有訪問修飾符。注意 介面不能單獨存在,不能像例項化乙個類那樣例項化介面 介面不能包含實現其成員的任何 而只是定義成員本身 實現過程由實現介面的類來完成。介面的名稱...
c 基礎加強
反編譯工具.netreflector7.0 dotnetfx.exe包含 net 基類庫,在客戶機器上簡便安裝 net環境 1 多個建構函式了,可以通過 this 繼承省略一些 2 c 有5 種訪問修飾符 private 當前類內部訪問 protected 當前類內部以及當前類的子類內部訪問。int...
C 基礎 多型
多型 為了程式的可擴充套件性,開放封閉原則 對修改封閉,對擴充套件開放 多型就是指不同物件收到相同訊息時,會產生不同的行為,同乙個類在不同的場合下表現出不同的行為特徵。多型的作用 把不同的子類物件都當做父類來看,可以遮蔽不同子類物件之間的差異性,寫出通用的 做出通用的程式設計,已以適應需求的不斷變化...