C# 多態性

MSDN 上面的定義:通過繼承,一個類可以有多種類型:可以用作它自己的類型,任何基類型,或者在實現接口時用作任何接口的類型。

從兩個方面來說明多態

1.在運行時,方法參數和集合或者是數組等位置,派生類的對象都可以作爲基類的對象處理,發生此情況時,該對象的聲明類型不再與運行時類型相同。

2.基類定義實現虛方法,派生類重寫這些方法,在運行時,CLR會查找運行時類型,並且調用派生類重寫的方法.

    class Shape
    {
        public virtual void Draw()
        {
            Console.WriteLine("Draw a shape");
        }
    }
    class Circle : Shape
    {
        public override void Draw()
        {
            Console.WriteLine("Draw a circle");
        }
    }
    class Rectangle : Shape
    {
        public override void Draw()
        {
            Console.WriteLine("Draw a Rectangle");
        }
    }
    class Triangle : Shape
    {
        public override void Draw()
        {
            Console.WriteLine("Draw a Triangle");
        }
    }
    class Programm
    {
        static void Main()
        {
            //此次就說明了,派生類對象可以作爲基類對象進行處理
            Shape[] shapes = 
            {
             new Circle(),
             new Rectangle(),
             new Triangle()
            };
            
            foreach (Shape s in shapes)
            {
                //調用Draw()方法的時候,調用了派生重寫的方法,而不是基類
                s.Draw();
            }
        }
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章