簡體   English   中英

派生類和基類引用類型的區別

[英]Difference between the reference types of derived and base classes

伙計們,我需要你的幫助。

我們有這個代碼:

class Program
{

    static void Main(string[] args)
    {
        Animal pig = new Pig();

        Pig pig2 = new Pig();

        List<Animal> Animals = new List<Animal>();
        Animals.Add(pig);
        Animals.Add(pig2);

        foreach(Animal a in Animals)
        {
            Animal.AnimalSound();
        }
    }
}


class Animal    
{
    public virtual void AnimalSound()
    {
        Console.WriteLine("AnimalSound");
    }
}

class Pig : Animal
{
    public override void AnimalSound()
    {
        Console.WriteLine("wee wee!");
    }
}

我的問題是當我實例化變量 pig 和 pig2 時有什么區別 Animal pig = new Pig(); 和 Pig pig2 = new Pig();

為什么不將它們都聲明為 ReferenceType Pig,因為 Pig 一如既往地是 Animal????

不同的是,當你執行這個Animal pig = new Pig();時, name是不可訪問的Animal pig = new Pig(); ,但在這種情況下可以訪問名稱Pig pig2 = new Pig(); . 您總是從基類繼承,因為您想使用來自父類的一些現成的行為,並希望在子類中添加一些特定於子類的行為。 豬永遠是動物,但所有的動物都不是豬。

class Pig : Animal
{
    public string name;

    public override void AnimalSound()
    {
        Console.WriteLine("wee wee!");
    }
}

所以你有基類Animal和派生類Pig 所以我們的問題可以歸結為基類和派生類之間的區別:

基類是派生其他類的類。

派生類是在現有類的基礎上創建的類。 派生類的一些特點:

  • 派生類幾乎繼承了基類的所有屬性。 由於可訪問性級別, Private屬性不可訪問,但是您可以使用反射來讀取它們的值。
  • 派生類可以向自身添加新成員或更改基類成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM