public class BaseClass
{
public virtual void Display()
{
Console.WriteLine("I am Base Class");
}
public void BaseClassMethod()
{
Console.WriteLine("I am Base Class Method");
}
}
public class DerivedClass : BaseClass
{
public override void Display()
{
Console.WriteLine("I am Derived Class");
}
public void DerivedClassMethod()
{
Console.WriteLine("I am Derived Class Method");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass bc = new BaseClass();
bc.Display();
bc.BaseClassMethod();
Console.WriteLine("--------------");
DerivedClass dc = new DerivedClass();
dc.Display();
dc.BaseClassMethod();
dc.DerivedClassMethod();
Console.WriteLine("--------------");
BaseClass bc2 = new DerivedClass();
bc2.Display();
bc2.BaseClassMethod();
//bc2.DerivedClass(); --> I can't reach b2.DerivedClass() method
Console.ReadLine();
}
}
大家好。我試圖清除我爲什麼和我想在哪裏創建和使用基類引用的派生類對象。我知道如何虛擬作品。我知道派生類是一個基類,我可以覆蓋虛擬方法。我可以在基類中訪問非虛擬方法。但我想知道哪裏可以,爲什麼我想要使用這種風格的對象創建。就像我在示例代碼的最後部分一樣;爲什麼我要創建一個具有基類引用的對象?
BaseClass bc2 = new DerivedClass();
我無法到達派生類方法,所以我不能使用派生類方法。但由於新的DerivedClass,它仍然是派生類。如果我使用正常的DerivedClass d = new DerivedClass();樣式,我可以使用這兩種類的方法。我只是找不到任何理由和情況,我想用這種風格。我會很高興,如果有人告訴我在哪種情況下我必須使用基類引用的派生類對象,所以我可以理解這種風格存在於語言中。我想知道爲什麼,我不是問爲什麼這不起作用或類似的東西。只想知道情況。謝謝。
你有沒有對'Class Inheritance'進行任何閱讀/研究?也許你可以考慮在'OOP'上做一個'C#MSDN Google Search'並且瞭解誰在哪裏以及爲什麼 – MethodMan
好,當你只有一個基類時,以及一個派生類,你不會去找到很多價值。這是當你有多個具有通用功能的類時,而且還有不同的實現路徑,你將從繼承中受益。 – Jonesopolis
簡介:它向讀者表明,該對象不會被用於比基類功能集所提供的任何更多的功能。聲明派生類型將是「邏輯噪聲」。這不是讓事情變得比需要更復雜。使用適合這項工作的工具。 –