阿摩線上測驗 登入

申論題資訊

試卷:109年 - 109 中國輸出入銀行_資訊人員:程式設計(C#)#95147
科目:程式設計
年份:109年
排序:0

題組內容

第一題: 請寫出程式的輸出結果:

申論題內容

(二)在下列的例子中,當使用newB( )創建B的實例時,產生什麽輸出?
5febf1ddc6f0b.jpg

詳解 (共 1 筆)

詳解 提供者:hchungw
在C#中,當基類的構造函數被調用時,如果它調用了一個被子類覆寫的虛方法,實際上將調用子類中的實現。這可能會在子類成員尚未初始化時發生,因為基類構造函數的調用會在子類成員初始化之前。
給定的代碼中,當B的實例被創建時,A的構造函數首先被調用。在A的構造函數中,它調用PrintFields方法,而此時將使用B類中的覆寫版本,因為它覆寫了A類中的虛方法。
在B的PrintFields方法中,它打印成員變數x和y的值。但是,這個時候B的構造函數還沒有執行,所以y的值將是它的默認值0,而不是構造函數中設定的-1。x在聲明時被初始化為1。
因此,創建B的實例時,輸出將會是:
makefile
Copy code
x=1,y=0
這一行是在A的構造函數中調用PrintFields方法時由B的PrintFields方法輸出的,此時x已經被初始化為1,而y還是它的預設值0。在此之後,B的構造函數將執行,將y的值設定為-1,但這是在PrintFields方法調用之後發生的。