抽象类总结及练习
該篇文章只是說(shuō)明抽象類(lèi)的一個(gè)使用場(chǎng)景,由于小弟水平一般,如果有說(shuō)的不對(duì)地方希望各位大牛們指出,也歡迎各位親們補(bǔ)充。
什么是抽象類(lèi)
用關(guān)鍵字abstract定義的類(lèi)即為抽象類(lèi),且只能作為基類(lèi)。
抽象類(lèi)注意的地方
1、? 用abstract定義的類(lèi)不一定包含抽象方法,也可以包含非抽象方法。
2、abstract定義的方法一定包含在抽象類(lèi)中。
3、抽象類(lèi)不能被實(shí)例,只能被繼承并且派生類(lèi)需要重寫(xiě)(overriding)抽象類(lèi)中的抽象方法。
4、抽象類(lèi)不能定義為密封類(lèi)(sealed)
5、? 如果派生類(lèi)沒(méi)有實(shí)現(xiàn)所有的抽象方法,則該派生類(lèi)也必須聲明為抽象類(lèi)。
實(shí)例
下面我通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明一下抽象類(lèi)的使用場(chǎng)景。
假入我們的系統(tǒng)中所有進(jìn)行ajax交互的后臺(tái)文件都是xxxx.ashx(一般處理文件),此時(shí)我們就可以寫(xiě)一個(gè)BaseHandler的抽象類(lèi)提供其他xxxx.ashx文件中的類(lèi)繼承,這樣我們就可以在BaseHandler中進(jìn)行統(tǒng)一的公共處理,如錯(cuò)誤處理等,還可以讓所有的派生類(lèi)都必須實(shí)現(xiàn)BaseHandler中的抽象方法,這樣就可以使所有的派生類(lèi)看起來(lái)非常統(tǒng)一,有助于代碼從高層次角度進(jìn)行規(guī)范,不羅嗦了上代碼。
1、BaseHandler代碼
public abstract class HandlerBase : IHttpHandler{public HttpRequest Request{get;private set;}public HttpResponse Response{get;private set;}public string Method { get; private set; }public void ProcessRequest(HttpContext context){try{Request = context.Request;Response = context.Response;Method = Request.Form["method"];if (string.IsNullOrWhiteSpace(Method)){Response.Write("error");return;}Init(context);}catch (Exception ex){Response.Write(ex.ToString());//記錄日志 }}/// <summary>/// 子類(lèi)必須繼承重寫(xiě)的方法/// </summary>/// <param name="context"></param>public virtual void Init(HttpContext context) { }public bool IsReusable{get{return false;}}}?所有的xxx.ashx都需要繼承該類(lèi)且必須要重寫(xiě)抽象函數(shù)Init(HttpContext context) { }
其中method參數(shù)是每個(gè)ajax請(qǐng)求都必須有的,值為調(diào)用的方法名稱(chēng),對(duì)該參數(shù)的了解請(qǐng)繼續(xù)往下看。
2、派生類(lèi)DataService.ashx
public class DataService : HandlerBase{public override void Init(HttpContext context){Type type = this.GetType();MethodInfo m = type.GetMethod(Method);m.Invoke(this,null);}public void HellWord(){int d = Convert.ToInt32("s1");Response.Write("OK");}}?method參數(shù)的值為需要調(diào)用的方法的名稱(chēng),并賦值給Method變量,通過(guò)反射根據(jù)Method的值決定調(diào)用具體的方法,這樣當(dāng)方法很多時(shí)可以簡(jiǎn)化Init中的判斷,不過(guò)可能會(huì)犧牲一些效率。
3、ajax調(diào)用DataService.ashx
<script type="text/javascript">$.post("DataService.ashx", { "method": "HellWord" }, function (json) { alert(json) });</script>?
參數(shù)method的值說(shuō)明了要調(diào)用的方法為HellWord()
讀完這篇文章希望對(duì)大家理解抽象函數(shù)有一定的幫助。歡迎大家補(bǔ)充更正。
轉(zhuǎn)載于:https://www.cnblogs.com/lc-chenlong/p/3196693.html
總結(jié)
- 上一篇: 【工具】telnet用法
- 下一篇: java_函数的重载