C#中的介面和抽象類學習
今天學習了介面和抽象類,但並沒有很好的進行整理,所以現在寫的時候,腦子裡多少有點亂亂的,先從介面開始吧。
interface
介面,規定了所有派生類的需要遵循的標準,介面定義了需要做些什麼,但是沒有具體的做法,做法的實現由派生類來做。 介面的定義使用關鍵字Interface,由於需要派生類繼承,所以介面預設是public型別,自然private或者protected是不可用的。介面的宣告需要使用“I”開頭進行標識。
Interface INewInterface{
}
除了宣告時的限制,介面的內容也只能包含方法、屬性、事件
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: