2 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
樓上的已經(jīng)說的很明白了,現(xiàn)在說些他們的規(guī)則:Base 是子類中引用父類
This 是當(dāng)前類,引用自己 1、盡量少用或者不用base和this。除了避開子類的名稱沖突和在一個(gè)構(gòu)造函數(shù)中調(diào)用其他的構(gòu)造函數(shù)之外,base和this的使用容易引起不必要的結(jié)果。
2、在靜態(tài)成員中使用base和this都是不允許的。原因是,base和this訪問的都是類的實(shí)例,也就是對象,而靜態(tài)成員只能由類來訪問,不能由對象來訪問。
3、base是為了實(shí)現(xiàn)多態(tài)而設(shè)計(jì)的。
4、使用this或base關(guān)鍵字只能指定一個(gè)構(gòu)造函數(shù),也就是說不可同時(shí)將this和base作用在一個(gè)構(gòu)造函數(shù)上。
5、簡單的來說,base用于在派生類中訪問重寫的基類成員;而this用于訪問本類的成員,當(dāng)然也包括繼承而來公有和保護(hù)成員。
6、除了base,訪問基類成員的另外一種方式是:顯示的類型轉(zhuǎn)換來實(shí)現(xiàn)。只是該方法不能為靜態(tài)方法。 希望我的回答對你有幫助,如果方便請?jiān)O(shè)為滿意答案。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果說你父類里面有一個(gè)成員比如int a;那么你子類里面也可以再定義一個(gè)int a,這個(gè)時(shí)候base.a和this.a表示的就不是一個(gè)變量了,如果說子類里面沒有,那么base.a和this.a表示的都是一個(gè)變量。還有就是重寫,覆蓋和構(gòu)造函數(shù)里面調(diào)用父類的這個(gè)方法。可以用:base(),還有就是關(guān)于形參名和成員變量相同的時(shí)候,因?yàn)槭?a >就近原則,所以直接寫變量名字表示的就是形參,如果加了this表示的就是這個(gè)類的成員。C#里面的this和base 跟JAVA里面的this和super是一樣的。你在定義一個(gè)變量的時(shí)候有一個(gè)this引用,指向自身,還有一個(gè)引用base,指向父類。關(guān)于你說的那種情況就是我說的第一種,如果子類成員有和父類成員同名的時(shí)候,就必須用this和base區(qū)分。
- 2 回答
- 0 關(guān)注
- 527 瀏覽
添加回答
舉報(bào)