程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 淺析C#中抽象類和接口的區別

淺析C#中抽象類和接口的區別

編輯:C#入門知識

淺析C#中抽象類和接口的區別


文章《淺析C#中接口的重要性》中講述了如何聲明和使用接口。

但是C#具有abstract關鍵字形成的抽象類,那麼二者我們該如何選擇呢!

C#允許把類和函數聲明為abstract。抽象類不能實例化,而抽象函數也不能直接實現,必須在非抽象的派生類中重寫。顯然,抽象函數本身是虛擬的,但是不能提供virtual關鍵字。如果類包含了抽象函數,則該類也是抽象的,必須聲明為抽象。

定義抽象類:

public abstract class Animal
{
    protected string _name;
    public abstract string Name
    {
        get;
    }
    public abstract void Show();
    public void MakeVoice()
    {
        Console.WriteLine(All animals can make voice!);
    }
}

定義接口:

public interface IAction
{
    void Move();
}

實現抽象類和接口:

public class Duck : Animal, IAction
{
    public Duck(string name)
    {
        _name = name;
    }
    public override void Show()
    {
        Console.WriteLine(_name + is showing for you!);
    }
    public override string Name
    {
        get{return _name;}
    }
    public void Move()
    {
        Console.WriteLine(Duck also can swim.);
    }
}
public class Dog : Animal, IAction
{
    public Dog(string name)
    {
        _name = name;
    }
    public override void Show()
    {
        Console.WriteLine(_name + is showing for you!);
    }
    public override string Name
    {
        get{return _name;}
    }
    public void Move()
    {
        Console.WriteLine(_name + Duck also can run.);
    }
}

客戶端實現:

public class TestAnimal
{
    public static void Main(string [] args)
    {
    Animal duck = new Duck(Duck);
    duck.MakeVoice();
    duck.Show();
    Animal dog = new dog(Dog);
    dog.MakeVoice;
    dog.Show();
    IAction dogAction = new Dog(A big dog);
    dogAction.Move();
    }
}

1.抽象類是提取具體類的公因式,而接口是為了將一些不相關的類“雜湊”成一個共同的群體。

2.所有代碼共有和可擴展性考慮,盡量使用Abstract Class。

3.當在差異較大的對象間尋求功能上的共性時,使用接口;當共性較多的對象間尋求功能上的差異時,使用抽象類。

4.如果要創建組件的多個版本,建議使用抽象類。如果設計小而簡練的功能塊,則使用接口。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved