如果一個(gè)類不與具體的事物相聯(lián)系,而只是表達(dá)一種抽象的概念,僅僅是作為其派生類的一個(gè)基類,這樣的類就是抽象類,在抽象類中聲明方法時(shí),如果加上abstract時(shí)就是抽象方法

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