假設我關注了兩個班級及其關系,如下所示。
public class Parent
{
public int parentID { get; set; }
}
public class Child : Parent
{
public string childId { get; set; }
}
在 main 方法中,當我使用子類實體創建父類物件時,我只能訪問或查看父類屬性,如下所示。

但是在運行時,我可以看到兩個類的屬性都存在如下。

我沒有得到上述場景的邏輯。請讓我澄清這個話題。
uj5u.com熱心網友回復:
這與邏輯無關,而是關于 Intellisense 與除錯器。pParent. 在設計時和 Intellisense 對宣告為Parent. 但是在運行時,除錯器會查看實際物件內部,這是Child按照
Parent pParent = new Child();
而且這個賦值是合法的,因為Child從Parent. 但是在設計時你沒有一個真正的物件。所以你會怎么做?- 投擲
Child castFromParent = (Child)pParent;
Console.WriteLine(castFromParent.childId); // <-- no design time issues
基本上,它歸結為編譯與運行時多型。2個不同的東西。
uj5u.com熱心網友回復:
區別在于參考的編譯時型別和其指向的物件的運行時型別可以是兩個完全不同的東西。
顯然,這兩種型別都必須相關(分配兼容性),但區別仍然存在,您理解這一點很重要:
object myString = "Hello";
變數 的編譯時型別myString是System.Object. 但是當您運行代碼時,存盤在其中的物件的運行時型別myString是System.String.
Intellisense 只能推理編譯時型別,而除錯器可以推理物件的運行時型別。這就是為什么您的代碼編輯器在編輯時只會顯示編譯時型別的成員,而除錯器將向您顯示運行時物件的成員。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/325651.html
上一篇:“合并”POD為一個
