我有下面兩個類。在C#繼承層次結構中創建對象
當執行這條線,
Child myChildObj = new Child();
這是否創建單獨的兩個對象(Parent
和Child
)? 或者只是一個子對象其中包含父方法和屬性?
更新:我想知道在CLR,它是否真正在運行時創建一個Parent
對象(無法訪問)。
我在tutorialspoint網站上看到以下引用。
派生類繼承基類成員變量和成員方法。 因此,應該在創建子類之前創建超類對象。您可以在成員初始化列表中給出超類初始化的說明。
我用下面的代碼來驗證這一點,我有兩個孩子和家長對象相同的hashCode值。
Console.WriteLine("child object hashcode : "+this.GetHashCode());
Console.WriteLine("base object hashcode : "+base.GetHashCode());
我不確定你的意思,你怎麼區分一個和兩個對象?您被賦予創建對象的單個引用,並且如您所知,該對象既可以用作「父」,也可以用作「子」。 – kai
圖像添加了哪些信息?你不能只顯示類的定義嗎? – CodeCaster
至於你的編輯:作者的意思是什麼_「因此,應該在創建子類之前創建超類對象,你可以在成員初始化列表中給出超類初始化指令」_也許是_「Call」:base( )'從你的構造函數調用超類的構造函數「_。這不是一個非常明確的說法。另外,關於哈希代碼:[_「GetHashCode始終返回相同的哈希代碼用於相同的對象引用」_](https://msdn.microsoft.com/zh-cn/library/11tbk3h9(v = vs.110).aspx ),所以'this.GetHashCode()'和'base.GetHashCode()'返回相同的結果。 – CodeCaster