天天看點

于C#處看面向對象

    終于又到了寫代碼的階段,感覺甚好啊!

最近學習C#,每開始一門課程總要先學面向對象,VB中,軟工中,連UML都是,C#也不例外。面向對象的思想無處不在,下面再從C#中看面向對象。當然像封裝啊、繼承啊、執行個體化之類的名詞我們已經接觸過N次了,不過每次我都會先溫習一下這些含義的,而每每都會溫故而知新。

    讓我先從類說起:動物是一個類,老虎也是一個類。但是我們把動物成為抽象類,那麼怎麼區分呢?這樣講,你可以在現實中找到一隻老虎,說明老虎這個類是可以執行個體化的;可是你能找到一個叫做“動物”的動物嗎?現在,抽象類,你懂的?上面提到的這一隻老虎就是一個對象了,很多隻老虎具有相同的特征,我們管它叫做屬性,這些老虎能做很多相同的事情,在這個領域我們管它叫做方法,把這些具有共同的屬性和方法的老虎抽象出來得到老虎這個類。現在類、對象、執行個體化,包括抽象類你都懂了,在不同的情況下類有不同的種類,如基類和派生類等。我們來看看他們之間的關系。 

     首先說繼承,我國是有繼承法的,是以在類與類的繼承當中也是有“法”可依的。密封類是不能被繼承的,密封類主要是為了防止第三方未經授權的擴充自身的類。一般情況下呢,可以這樣了解繼承,我來舉個小例子。

1.由不在同一直線上的三條線段首尾順次連接配接所組成的封閉圖形叫做三角形。

2.這是一個等腰的三角形。

3.這是一個等腰的由不在同一直線上的三條線段首尾順次連接配接所組成的封閉圖形。

 1父類

↓繼承,省去了3的麻煩。

 2子類

定義類和對象等時要用的public、private、protected、internal都是通路修飾符,它們是控制通路權限的,而被protected修飾的類隻能被有繼承關系的類通路。

    也可以說,繼承是子類使用父類的方法,多态是父類使用子類的方法。那麼問題又來了,什麼叫多态?同一操作作用于不同的對象,可以有不同的解釋,産生不同的執行結果,這就是多态。我覺得還是用一小段代碼來說明更簡單易懂。

class Program
    {
        static void Main(string[] args)
        {
            sharp ss = new 圓();//用多态來實作
            Console.WriteLine(ss.getsides());//自動判斷如何調用合适的方法
        }
    }
    abstract public class sharp
    {
        public abstract int getsides();
    }
    public class 圓 : sharp
    {
        public override int getsides()
        {
            return 1;
        }
    }
    public class 方 : sharp
    {
        public override int getsides()
        {
            return 2;
        }
    }
}    
           

看一下傳回結果!

于C#處看面向對象

    這裡有編譯時的多态性和運作時的多态性,分别通過重載和複寫虛成員實作(C#中)。重載的概念在明天的視訊中才會講到,繼續學習中。 

    面向對象的概念中還剩封裝和接口,接口是更抽象的抽象類,隻包含方法的聲明,不包含任何代碼,這樣類與類間就實作了低耦合。這就離不開封裝,封裝就是隐藏對象的屬性和實作細節,僅對外公開接口,控制在程式中屬性的讀和修改的通路級别,良好的封裝能夠減少耦合,類内部的實作可以自由地修改。

   在思想上能夠将面向對象統一,各個語言中就融會貫通了。

繼續閱讀