如果一個類不與具體的事物相聯(lián)系,而只是表達一種抽象的概念,僅僅是作為其派生類的一個基類,這樣的類就是抽象類,在抽象類中聲明方法時,如果加上abstract時就是抽象方法
抽象類概述及聲明
抽象類與非抽象類的主要區(qū)別:
①.抽象類不能直接被實例化;
②.抽象類中可以只有抽象方法,也可以只有非抽象方法,也可以抽象方法、非抽象方法都有。(非抽象 類中不能有抽象方法);
③.抽象類不能被密封。
以上會在下面例子中一一驗證:
class Program { static void Main(string[] args) { M m = new M();//錯誤提示:無法創(chuàng)建抽象類或接口M的實例。驗證了①,抽象類和接口不能被實例化 } } public abstract class M { public void A() { Console.WriteLine("調用了A方法"); } public abstract void B() //錯誤提示:M.B()無法聲明主體,因為它標記為abstract。也就是說,抽象方 法不能有方法體。 { Console.WriteLine("調用了B方法"); } public abstract void G(); } public class C { public abstract void H();//錯誤提示:C.D()是抽象的,但它包含在非抽象類C中。再對比 M 類中的方法A()、B()來看,就驗證了②:非抽象類中不能有抽象方法;抽象類中可以只有抽象方法,也可以只有非抽象方法,也可以抽象方法、非抽象方法都有。 public void D() { } } public sealed abstract class E //錯誤提示:E 是抽象類,它不能是密封(sealed)或靜態(tài)(static)的。這就驗證了③。 { } public static abstract class F //錯誤提示:F 是抽象類,它不能是密封(sealed)或靜態(tài)(static)的。這就驗證了③。 { }
2.抽象方法概述及聲明
聲明抽象方法時需注意:
①.抽象方法必須聲明在抽象類中(上面已經(jīng)驗證);
②.聲明抽象方法時,不能使用virtual、static、private、sealed修飾符;
③.在抽象類中抽象方法不提供實現(xiàn)。
下面例子中會一一驗證:
class Program { static void Main(string[] args) { } } public abstract class M { public abstract void A(); public virtual abstract void B();//錯誤提示:抽象方法 B 不能標記為 virtual。因為虛方法和抽象方法屬于同一個等級的,并列關系。 public static abstract void C();//錯誤提示:靜態(tài)成員 C不能標記為overrid、virtual或abstract。 private abstract void D(); //錯誤提示:虛擬成員或抽象成員不能是私有的。因為虛擬成員是讓繼承類來override的,如果是private,繼承類都不能看見;抽象方法要是私有的話,這個抽象方法所在的抽象類的子類就沒法實現(xiàn)這個抽象方法,看不見。 A();//抽象方法在自己的抽象類中不能有方法體,所以不能在本類中實現(xiàn)。要在繼承類中實現(xiàn)。 }
3.抽象類與抽象方法的使用
直接舉例子:
using System; using System.Collections.Generic; using System.Text; namespace _ { public abstract class myClass { private string id = ""; private string name = ""; /// <summary> /// 編號屬性及實現(xiàn) /// </summary> public string ID { get { return id; } set { id = value; } } /// <summary> /// 姓名屬性及實現(xiàn) /// </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來實例化抽象類,然后使用抽象類訪問抽象類中的屬性及方法。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文標題:C#抽象類和抽象方法-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.chinadenli.net/article6/cogsog.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、電子商務、品牌網(wǎng)站建設、搜索引擎優(yōu)化、網(wǎng)站設計公司、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容