base常用于悔叽,在派生類對(duì)象初始化時(shí)和基類進(jìn)行通信步绸。
base可以訪問(wèn)基類的公有成員和受保護(hù)成員毡庆,私有成員是不可訪問(wèn)的。
在多層繼承中奄妨,base可以指向的父類的方法有兩種情況:一是有重載存在的情況下涂籽,base將指向直接繼承的父類成員的方法,例如Audi類中的ShowResult方法中砸抛,使用base訪問(wèn)的將是Car.ShowResult()方法评雌,而不能訪問(wèn)Vehicle.ShowResult()方法;而是沒(méi)有重載存在的情況下直焙,base可以指向任何上級(jí)父類的公有或者受保護(hù)方法景东,例如Audi類中,可以使用base訪問(wèn)基類Vehicle.Run()方法奔誓。
this指代類對(duì)象本身斤吐,用于訪問(wèn)本類的所有常量、字段厨喂、屬性和方法成員和措,而且不管訪問(wèn)元素是任何訪問(wèn)級(jí)別。因?yàn)橥苫停瑃his僅僅局限于對(duì)象內(nèi)部派阱,對(duì)象外部是無(wú)法看到的,這就是this的基本思想斜纪。另外贫母,靜態(tài)成員不是對(duì)象的一部分,因此不能在靜態(tài)方法中引用this盒刚。
通用規(guī)則
? 盡量少用或者不用base和this腺劣。除了決議子類的名稱沖突和在一個(gè)構(gòu)造函數(shù)中調(diào)用其他的構(gòu)造函數(shù)之外,base和this的使用容易引起不必要的結(jié)果伪冰。
? 在靜態(tài)成員中使用base和this都是不允許的誓酒。原因是樟蠕,base和this訪問(wèn)的都是類的實(shí)例贮聂,也就是對(duì)象靠柑,而靜態(tài)成員只能由類來(lái)訪問(wèn),不能由對(duì)象來(lái)訪問(wèn)吓懈。
? base是為了實(shí)現(xiàn)多態(tài)而設(shè)計(jì)的歼冰。
? 使用this或base關(guān)鍵字只能指定一個(gè)構(gòu)造函數(shù),也就是說(shuō)不可同時(shí)將this和base作用在一個(gè)構(gòu)造函數(shù)上耻警。
? 簡(jiǎn)單的來(lái)說(shuō)隔嫡,base用于在派生類中訪問(wèn)重寫的基類成員;而this用于訪問(wèn)本類的成員甘穿,當(dāng)然也包括繼承而來(lái)公有和保護(hù)成員腮恩。
? 除了base,訪問(wèn)基類成員的另外一種方式是:顯示的類型轉(zhuǎn)換來(lái)實(shí)現(xiàn)温兼。只是該方法不能為靜態(tài)方法秸滴。