大家好,我是華山自控編程的朱老師
前幾天一個學員在學習c#使用base關鍵字時。一直不理解base輸出的值為什么不是父類的100,
而是輸出了11:程序輸出結果如下:
不知道什么原因。程序代碼截圖如下:
其實很多初學者在使用base關鍵字時,都會碰到這樣問題:因為調用了base關鍵字時,就要輸出父類的數據。下面我們就對這個問題進行詳細分析。
問題分析:
這個代碼第25行,this.a =a可以看出,在子類B并沒有重新定義變量a,而是直接引用變量a,通過構造函數重新賦值。那么通過 "變量先定義,后賦值的邏輯",這個變量a就是父類的變量a.它和父類的變量a就是同一個。指向的是同一個內存地址。所以,這個時候,我們在子類中通過base.a使用的變量就是父類的變量。至于輸出的值為什么不是父類的100,而是11呢?其實在子類構造函數中給變量a重新賦值后,這個時候,父類的變量a的值已經是11,再也不是初始值100了。因為子類修改的數據就是父類的變量a的數據。
那么有同學可能會問,如果我想在子類中輸出父類的變量a的初始值100,該怎么實現呢?問得非常好。這里我們只需要通過一個關鍵字new就可以輕松實現。在繼承類B中通過關鍵字new重新定義相同的變量a:代碼截圖如下:
再次運行程序,輸出結果如下:
以上就是base,new關鍵字及繼承特性的一些基本使用和總結,另外再延伸下相關的知識點:
base:用于在派生類中實現對基類公有或者受保護成員的訪問,但是只局限在構造函數、實例方法和實例屬性訪問器中。
MSDN中小結的具體功能包括:
(1)調用基類上已被其他方法重寫的方法。
(2)指定創建派生類實例時應調用的基類構造函數。
base常用于,在派生類對象初始化時和基類進行通信。 base可以訪問基類的公有成員和受保護成員,私有成員是不可訪問的。
tip:在多層的繼承中,base可以指向的父類的方法有兩種,一是有重載的情況下,base直接指向繼承的父類成員的方法,二是沒有重載存在的情況下,base可以指向任何上級父類的公有或受保護的方法。(好像是構造方法)
以上就是初學者在學習c#使用base,new關鍵字時常見的問題。總結如下:
1:base關鍵字訪問的是父類的成員。可以在子類中修改父類的屬性。
2:new關鍵字可以在子類中重新定義父類的相同屬性。重新分配新的內存空間。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.