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

C#中抽象類和介面

一、抽象類:類是一個具有相同特徵和行為的抽象,而抽象類(class 前加上 abstract)沒有指出行為的具體細節,而由他的子類去實現相應的行為。

注意:一個非密封類(密封類使用 sealed 修飾)可以派生子類,子類可以是抽象類或非抽象類。

下面給出示例:

public abstract class BB
{

	public int a;
	public void GetNum()
	{
		
	}
	public abstract void GetHeight();


}
// 抽象類可以繼承自抽象類,不必實現父類的抽象方法
public  abstract  class DD:BB
{
	// 自己的抽象方法
	public abstract int GetMoney();

}
// 非抽象類繼承自抽象類 BB,必須實現(需要加上重寫關鍵字:override ) BB 的都有抽象方法
public    class EE:BB
{
	public override void GetHeight()
	{

	}

}

抽象類與非抽象類的區別:

1、抽象類使用 abstract 修飾,可以被繼承但不能被例項化(可以引用子類例項化物件),子類繼承自抽象類後必須實現該類的所有抽象方法;

2、抽象類中可以有抽象方法和非抽象方法,非抽象類不能有抽象方法,抽象方法一定要被子類重寫,而其他方法沒要求。

二、介面:當使用類的時候,僅關注其行為,不關心繼承時可以使用介面來代替類。

下面給出示例:

// 抽象類
public abstract class AbsClass
{
	// 例項欄位 a
	public int a;
	// 只讀屬性 B
	public string B{get;}
	// 抽象方法  
	public abstract  void Test();
}
public class  SubClass:AbsClass
{
	// 重寫父類的抽象方法
	public override void Test()
	{

	}

}
// 介面中的成員是隱式公有的,不能加修飾符
public  interface IMyInterface
{
	// 只讀屬性
	int AA{get;}
	// 方法
	void Test();

}
注意:介面的意義就是公共行為的載體,所以他的成員都是隱式公有的,不能加上修飾符。

下面給出呼叫的示例:

// 父類的引用指向子類的例項化物件
AbsClass aa = new SubClass();
// 呼叫子類重寫後的方法
aa.Test();

抽象類和介面的區別:

1、抽象類中可以有實現成員(非抽象方法),而介面中的方法只有宣告沒有實現;

2、抽象類中可以有欄位,介面中不能有欄位,但可以有屬性;

3、抽象類的成員可以使用公有或其他修飾符,介面中成員是隱式公有的,不需要修飾;

4、抽象類是概念的抽象,介面注重行為,抽象類不支援多重繼承,而一個類可以實現多個介面。