標籤:style io ar color 使用 sp on bs cti
如果一個類不與具體的事物相聯絡,而只是表達一種抽象的概念,僅僅是作為其衍生類別的一個基類,這樣的類就是抽象類別,在抽象類別中聲明方法時,如果加上abstract時就是抽象方法
1.抽象類別概述及聲明
抽象類別與非抽象類別的主要區別:
·抽象類別不能直接被執行個體化
·抽象類別中可以包含抽象成員,但非抽象類別中不可以
·抽象類別不能被密封
舉個小例子
public abstract class oneClass
{
public int i;
public void denylau()
{
}
}
2.抽象方法概述及聲明
聲明抽象方法時需注意:·抽象方法必須聲明在抽象類別中 ·聲明抽象方法時,不能使用virtual、static、private修飾符。
在抽象類別中抽象方法不提供實現。
如:
public abstract class myTestClass()
{
public abstract void method();
}
3.抽象類別與抽象方法的使用
直接舉例子,講解例子嘍!
using System;
using System.Collections.Generic;
using System.Text;
namespace _
{
public abstract class myClass
{
private string id = "";
private string name = "";
/// <summary>
/// 編號屬性及實現
/// </summary>
public string ID
{
get
{
return id;
}
set
{
id = value;
}
}
/// <summary>
/// 姓名屬性及實現
/// </summary>
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
/// <summary>
/// 抽象方法,用來輸出資訊
/// </summary>
public abstract void ShowInfo();
}
public class DriveClass:myClass //繼承抽象類別
{
/// <summary>
/// 重寫抽象類別中輸出資訊的方法
/// </summary>
public override void ShowInfo()
{
Console.WriteLine(ID + " " + Name);
}
}
class Program
{
static void Main(string[] args)
{
DriveClass driveclass = new DriveClass(); //執行個體化衍生類別
myClass myclass = driveclass; //使用衍生類別對象執行個體化抽象類別
myclass.ID = "BH0001"; //使用抽象類別對象訪問抽象類別中的編號屬性
myclass.Name = "TM"; //使用抽象類別對象訪問抽象類別中的姓名屬性
myclass.ShowInfo(); //使用抽象類別對象調用抽象類別中的的抽象方法
}
}
}
上例中通過衍生類別的對象driveclass來執行個體化抽象類別,然後使用抽象類別訪問抽象類別中的屬性及方法。
上面這個小例子,細心的朋友會發現,怎麼抽象類別和我們上一篇文章講的介面差不多嗎?那麼究竟抽象類別和介面存在哪些區別呢?
Ok,下面就介紹下抽象類別和介面的區別嘍:
·它們的衍生類別只能繼承一個基類,即只能繼承一個抽象類別,但是可以繼承多個介面。
·抽象類別中可以定義成員的實現,但介面中不可以。
·抽象類別中包含欄位、建構函式、解構函式、靜態成員或常量等,介面中不可以。
·抽象類別中的成員可以私人的(只要不是抽象的)、受保護的、內部的或受保護的內部成員,但介面中的成員必須是公用的。
PS:抽象類別和介面這兩種類型用於完全不同的目的。抽象類別主要用作對象系列的基類,共用某些主要特性,例如共同的目的和結構。介面則主要用於類,這些類在基礎水平上有所不同,但仍然可以完成某些相同的任務。
C#抽象類別和抽象方法