1. 程式人生 > >C#中的介面和抽象類學習

C#中的介面和抽象類學習

今天學習了介面和抽象類,但並沒有很好的進行整理,所以現在寫的時候,腦子裡多少有點亂亂的,先從介面開始吧。

interface

介面,規定了所有派生類的需要遵循的標準,介面定義了需要做些什麼,但是沒有具體的做法,做法的實現由派生類來做。 介面的定義使用關鍵字Interface,由於需要派生類繼承,所以介面預設是public型別,自然private或者protected是不可用的。介面的宣告需要使用“I”開頭進行標識。

  Interface INewInterface{
     
}

除了宣告時的限制,介面的內容也只能包含方法屬性事件

索引器。介面中所有內容,都不可以使用訪問修飾進行修飾,public也除外。方法沒有實現主體,只包含一個方法簽名;屬性則只有一個屬性訪問器,但可以通過隱藏get或set方法,來實現屬性的只讀或者只寫。

  Interface INewInterface
{
     int Age{get; set;}
     void ShowAge();
}

繼承介面的可以是類也可以是結構體,但是都需要實現介面中宣告的成員,For example:

  class NewClass:INewInterface{
     public int Age{get; set;}
     public void ShowAge(){
         Console.WriteLine($"age:{Age}");
    }
}

對於類而言,除了可以繼承介面之外,最基本就是類與類之間的繼承,但是在C#中,一個類的派生類只能有一個,一個類的基類也只能有一個,但是繼承的介面個數是沒有限制的。只是在書寫上基類必須放在所有介面之前,基類與介面、介面與介面之間使用“,”進行分隔,for example:

  class BaseClass{
    ...
}
 Interface IFirst{
    ...
}
 Interface ISecond{
    ...
}
 class ChildClass:BaseClass, IFirst, ISecond {
     
}

介面之間也可以相互繼承,進行擴充套件,但對於具體的派生類來說,就需要實現所有繼承的介面的成員,for example:

  Interface IInterfaceA{
     void MethodA();
}
 
 Interface IInterfaceB:IInterfaceA{
     void MethodB();
}
 
 Class ClassA:IIterfaceB{
     public void MethodA(){
        ...
    }
     
     public void MethodB(){
        ...
    }
}

以上是介面的內容,下面說一說抽象類。

抽象類

抽象類和介面很像,也不能例項化,是對於一部分類中相同特性而做出的抽象。只不過與介面不同的地方就是,抽象類除了使用abstarct關鍵字修飾的方法不能有方法主體,普通的方法可以有方法的實現,派生類繼承這些方法。 抽象類的宣告使用abstract關鍵字,指定派生類要實現的方法也需要使用abstract關鍵字進行修飾,不可以使用private關鍵字進行修飾並且沒有實現主體,具體的操作則是在派生類中重寫該方法來實現,需要使用關鍵字override。For example:

  abstract class AbstractClass{
   public int Age{get; set;}
   public abstract void ShowInfo();
   public void DoWork(){
       Console.WriteLine("AbstractClass do work");
  }
}
 
 class PeopleClass:AbstractClass{
     public override void ShowInfo(){
         Console.WriteLine($"Age:{this.Age}");
    }
}
 
 class Program
  {
       static void Main(string[] args)
      {
         PeopleClass pc = new PeopleClass();
         pc.Age = 20;
         pc.ShowInfo();
         pc.DoWork();
      }
  }
   輸出:
   Age:20
   AbstractClass do work
   請按任意鍵繼續. . .

可以看的出來,抽象類和普通的類區別也不大,但還有一點介面的特性,像是普通類與介面之間的一個過渡。不像介面那麼抽象,但又比普通類更加高階一點,是一種比較靈活的存在。 PS: 以上均是自己學習之後理解所寫,水平有限難免會出現錯誤之處,總是唯恐給閱讀到小夥伴造成誤導,所以希望能夠以質疑的態度去瀏覽,也希望小夥伴能夠批評指出,共同成長。