ASP.NET抽象類別用法詳細介紹總結

來源:互聯網
上載者:User

簡單的說:
1.抽象類別和介面相近,區別在於,抽象類別中可以部分實現其成員。
2.抽象類別中至少有一個未實現的成員。
3.抽象類別不能執行個體化,它的衍生類別可以被執行個體化。


定義方法為:

 代碼如下 複製代碼

以下為引用的內容:
/// <summary>
/// 定義抽象類別
/// </summary>
abstract public class Animal
{
    //定義靜態欄位
    static protected int _id;
    //定義屬性
    public abstract static int Id
    {
        get;
        set;
    }


    //定義方法
    public abstract void Eat();

    //定義索引器
    public string this[int i]
    {
        get;
        set;
    }
}

/// <summary>
/// 實現抽象類別
/// </summary>
public class Dog: Animal
{
    public static override int Id
    {
        get {return _id;}
        set {_id = value;}
    }


    public override void Eat()
    {
        Console.Write("Dog Eats.")
    }
}

練習題題目:

要實現隨身碟、MP3播放器、移動硬碟三種移動存放裝置,要求電腦能通這三種裝置進行資料交換,並且以後可能會有新的第三方的移動存放裝置,所以電腦必須有擴充性,能與目前為止而以後可能會出現的存放裝置進行資料交換。各個存放裝置間讀、寫得實現方法不同,隨身碟和移動硬碟只有這兩個方法,MP3Player還有一個playMusic方法;

 

 代碼如下 複製代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Practices03
{
    class Program
    {
        static void Main(string[] args)
        {
            Computer myComputer = new Computer();
            RSD myRSD = new USB();
            myRSD.ReadDate();
            myRSD.WriteDate();
            Console.ReadKey();

        }
    }
    /// <summary>
    /// RSD:移動存放裝置
    /// </summary>
   abstract class RSD
    {
       public abstract void ReadDate();
       public abstract void WriteDate();
    }
   class USB:RSD
   {
       public override void ReadDate()
       {
           Console.WriteLine("ReadDate method for USB!");
       }
       public override void WriteDate()
       {
           Console.WriteLine("WtiteDate method for USB!");
       }
   }
   class MP3Player:RSD
   {
       public override void ReadDate()
       {
           Console.WriteLine("ReadDate method for MP3Player!");
       }
       public override void WriteDate()
       {
           Console.WriteLine("WtiteDate method for MP3Player!");
       }
       public virtual void PlayMusic()
       {
           Console.WriteLine("PlayMusic method for MP3Player!");
       }
   }
   class MobileHDD:RSD
   {
       public override void ReadDate()
       {
           Console.WriteLine("ReadDate method for MobileHDD!");
       }
       public override void WriteDate()
       {
           Console.WriteLine("WtiteDate method for MobileHDD!");
       }
   }
   class Computer
   {
       public RSD RSD { get; set; }
       public void ReadDate()
       {
           RSD.ReadDate();
       }
       public void WriteDate()
       {
           RSD.WriteDate();
       }
   }
}

 


何時使用抽象類別
當需要一組相關組件來包含一組具有相同功能的方法,但同時要求在其他方法實現中具有靈活性時,可以使用抽象類別。當預料可能出現版本問題時,抽象類別也具有價值,因為基類比較靈活並易於被修改。有關詳細資料,請參見抽象類別與介面建議。

抽象類別與介面建議請參見
抽象類別   |   組件中的多態性   |   MustInherit   (Visual   Basic)   |   abstract   (C#)
選擇將功能設計為介面還是抽象類別(在   Visual   Basic   中為   MustInherit   類)有時是一件困難的事。“抽象類別”是一種不能執行個體化而必須從中繼承的類。抽象類別可以完全實現,但更常見的是部分實現或者根本不實現,從而封裝繼承類的通用功能。有關詳細資料,請參見抽象類別。

相反,“介面”是完全抽象的成員集合,可以被看作是為操作定義合約。介面的實現完全留給開發人員去做。

介面和抽象類別對組件互動都很有用。如果一個方法要求一個參數形式的介面,則任何實現該介面的對象都可以用在該參數中。例如:


Visual   Basic
Public   Sub   Spin   (ByVal   widget   As   IWidget)
End   Sub

C#
public   void   Spin   (IWidget   widget)
{}
此方法可以接受任何將   IWidget   實現為小組件參數的對象,即使   IWidget   的實現可能相差很大。抽象類別也允許這種多態性,但須注意以下幾點:  

類可能只是從一個基類繼承,所以如果要使用抽象類別為一組類提供多態性,這些類必須都是從那個類繼承的。  
抽象類別還可能提供已實現的成員。因此,可以用抽象類別確保特定數量的相同功能,但不能用介面這樣做。  
這裡是一些建議,協助您決定使用介面還是抽象類別為組件提供多態性。  

如果預計要建立組件的多個版本,則建立抽象類別。抽象類別提供簡單易行的方法來控制組件版本。通過更新基類,所有繼承類都隨更改自動更新。另一方面,介面一旦建立就不能更改。如果需要介面的新版本,必須建立一個全新的介面。  
如果建立的功能將在大範圍的全異對象間使用,則使用介面。抽象類別應主要用於關係密切的對象,而介面最適合為不相關的類提供通用功能。  
如果要設計小而簡練的功能塊,則使用介面。如果要設計大的功能單元,則使用抽象類別。  
如果要在組件的所有實現間提供通用的已實現功能,則使用抽象類別。抽象類別允許部分實作類別,而介面不包含任何成員的實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.