[英]Creating variable of type <derived class> to store <base class> object in C#
[英]creating a base class type variable with the reference to an object with the type of an inheriting class
class Program
{
static void Main(string[] args)
{
BaseC instance = new DerivedC();
// I don't see Y here.
Console.ReadLine();
}
}
public class BaseC
{
public int x;
}
public class DerivedC : BaseC
{
public int y;
}
我說的是Main函數的第一行。 當我這樣創建它時:DerivedC instance = new DerivedC(); 一切對我來說都很清楚,而且我看到了兩個變量,但是為什么以上述方式創建對象時卻看不到Y? 'instance'變量的類型(BaseC或DerivedC)如何影響結果?
這就是多態在C#中的工作方式:在基類類型的變量中,您可以存儲對任何子類實例的引用-但是,如果選擇這樣做,則只能通過以下方式“查看”基類成員:變量。 這樣做的原因是安全性:保證無論變量引用什么,它都會有一個x
。 但是,可能存在其他沒有y
子類。
您可能會爭辯說,很明顯該變量引用了DerivedC
,但這僅僅是因為這是一個簡單的示例。 想象一下一些代碼,其中有一個將BaseC
作為參數的函數。 可以在一個地方用DerivedC
調用該函數,而在另一個地方用不帶y
的DifferentDerivedC
調用。 然后,如果允許該函數訪問y
,則該函數將在第二次調用中失敗。
因為實例的類型是BaseC,所以它不會公開Property y。 要訪問Property y,您需要執行以下操作:
((DerivedC)instance).y
y是一個擴展屬性,只能從子類訪問。 那就是繼承的概念。 Child繼承child的屬性,而不是相反。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.