抽象类总结及练习
該篇文章只是說明抽象類的一個使用場景,由于小弟水平一般,如果有說的不對地方希望各位大牛們指出,也歡迎各位親們補充。
什么是抽象類
用關鍵字abstract定義的類即為抽象類,且只能作為基類。
抽象類注意的地方
1、? 用abstract定義的類不一定包含抽象方法,也可以包含非抽象方法。
2、abstract定義的方法一定包含在抽象類中。
3、抽象類不能被實例,只能被繼承并且派生類需要重寫(overriding)抽象類中的抽象方法。
4、抽象類不能定義為密封類(sealed)
5、? 如果派生類沒有實現所有的抽象方法,則該派生類也必須聲明為抽象類。
實例
下面我通過一個簡單的例子說明一下抽象類的使用場景。
假入我們的系統中所有進行ajax交互的后臺文件都是xxxx.ashx(一般處理文件),此時我們就可以寫一個BaseHandler的抽象類提供其他xxxx.ashx文件中的類繼承,這樣我們就可以在BaseHandler中進行統一的公共處理,如錯誤處理等,還可以讓所有的派生類都必須實現BaseHandler中的抽象方法,這樣就可以使所有的派生類看起來非常統一,有助于代碼從高層次角度進行規范,不羅嗦了上代碼。
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>/// 子類必須繼承重寫的方法/// </summary>/// <param name="context"></param>public virtual void Init(HttpContext context) { }public bool IsReusable{get{return false;}}}?所有的xxx.ashx都需要繼承該類且必須要重寫抽象函數Init(HttpContext context) { }
其中method參數是每個ajax請求都必須有的,值為調用的方法名稱,對該參數的了解請繼續往下看。
2、派生類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參數的值為需要調用的方法的名稱,并賦值給Method變量,通過反射根據Method的值決定調用具體的方法,這樣當方法很多時可以簡化Init中的判斷,不過可能會犧牲一些效率。
3、ajax調用DataService.ashx
<script type="text/javascript">$.post("DataService.ashx", { "method": "HellWord" }, function (json) { alert(json) });</script>?
參數method的值說明了要調用的方法為HellWord()
讀完這篇文章希望對大家理解抽象函數有一定的幫助。歡迎大家補充更正。
轉載于:https://www.cnblogs.com/lc-chenlong/p/3196693.html
總結
- 上一篇: 【工具】telnet用法
- 下一篇: CorelDRAWX4的VBA插件开发(