[讀書筆記 ]Stephens' C# Programming with Visual Studio 2010 24-Hour Trainer 第二十五章

  • 703
  • 0

閱讀Stephens' C#教材第二十五章筆記

 

Chapter 25 Fine-Tuning Classes.
 
本章將介紹兩個over開頭的方法--overload(多載)及override(覆寫)。
 
讓多個方法具有相同的名字,以參數序列不一樣加以區分要執行的是那一個方法,稱為overloading(多載)。
 
假設現在要開發一個課程分派程式,程式中有三個類別:學生(student), 課程(course), 講師(instructor)。
student類別要提供兩個註冊enroll方法,一個enroll要提供班級(class)名稱,另一個要提供課程(course)名稱。
同樣的對於instructor類別也要兩個teach方法,一個teach要提供班級(class)名稱,另一個要提供課程(course)名稱。
最後對於course類別要提供不同的report方法,例如:
如果沒有參數的呼叫report方法,該方法要出現對話框收集資料。
一個report方法要能夠接收filestream類型的參數。
另一個report方法要能夠將附加檔案,所以要接收string類型(檔案名稱)的參數。
 
以上的情況使用多載可以很容易處理。
 
當你建立一個類別從別的類別繼承,你可以在新類別新增屬性、方法及事件讓新類別具有更多原類別所沒有的特徵,其中若需要將原類別具有的方法覆蓋重寫成新版本時,這樣的做法就稱為overriding(覆寫)。
 
進行覆寫方法的前提,必須是原類別的該方法宣告時使用virtual關鍵字,代表允許此方法被覆寫。
 
例如Person類別有一個GetAddress方法,使用virtual關鍵字,定義如下:

        // Return the Person's address.
        public virtual string GetAddress()
        {
            return FirstName + " " + LastName + "\n" +
                Street + "\n" + City + "    " + State + "    " + Zip;
        }
 
後來Employee需要再地址上加一個MailStop的屬性,它可以透過覆寫方法,重寫GetAddress方法,使用override關鍵字,定義如下:

        // Return the Employee's address.
        public override string GetAddress()
        {
            return base.GetAddress() + "\n" + MailStop;
        }
這樣Employee一方面再利用Person的GetAddress方法宣告,一方面又可以滿足本身加一個MailStop屬性的需要。
 
ListPeople程式示範透過覆寫方法,顯示不同類別的地址資料
 
TRY IT的DrawShapes程式示範shape類別中的Draw方法本身具有多載特性,然後被ShapeEllipse類別及ShapeRectangle類別覆寫後執行的效果。