抽象类总结及练习

该篇文章只是说明抽象类的一个使用场景,由于小弟水平一般,如果有说的不对地方希望各位大牛们指出,也欢迎各位亲们补充。

什么是抽象类

用关键字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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础入门_4函数

Python 基础入门前三篇&#xff1a; Python 基础入门–简介和环境配置Python基础入门_2基础语法和变量类型Python基础入门_3条件语句和迭代循环 第四篇内容&#xff0c;这次介绍下函数的基本用法&#xff0c;包括函数的定义、参数的类型、匿名函数、变量作用域以及从模块导入…

event auto模式的问题

。。。转载于:https://www.cnblogs.com/bluebbc/p/3196777.html

一文了解神经网络的基本原理

这是简单介绍神经网络的知识&#xff0c;并介绍一种特别的神经网络–多层感知器(Multi Layer Perceptron,MLP)。 翻译自 https://ujjwalkarn.me/2016/08/09/quick-intro-neural-networks/ 这篇文章并不涉及到对数学公式的推导&#xff0c;只是简单介绍了神经网络的结构和基本…

详解javascript中的call, apply

一些学js的同学一看到call, apply, 就蒙了, 感觉不好懂, 看的头大. 今天我们就一起来研究一下这2个东东.彻底弄清楚它们的用法. 定义: call, apply是函数的方法, 只有函数才有这2个方法.作用: call, apply主要作用是改变函数赖以执行的作用域, 简言之就是改变函数中this的指向.…

[Python技巧]是时候用 defaultdict 和 Counter 代替 dictionary 了

我们在采用 dict 的时候&#xff0c;一般都需要判断键是否存在&#xff0c;如果不存在&#xff0c;设置一个默认值&#xff0c;存在则采取其他的操作&#xff0c;但这个做法其实需要多写几行代码&#xff0c;那么是否有更高效的写法&#xff0c;可以减少代码&#xff0c;但可读…

数据库索引应用

一、索引的概念索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中&#xff0c;索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中&#xff0c;索引也允许数据库程序迅速地找到表中的数据&#xff0c;而不必扫描整个数据库。二、索引…

[Github推荐]CVPR2019录用论文下载及可视化论文网站

简介 CVPR 是 IEEE Conference on Computer Vision and Pattern Recognition 的缩写&#xff0c;即 IEEE 国际计算机视觉与模式识别会议。该会议是由 IEEE 举办的计算机视觉和模式识别领域的顶级会议。 它是 IEEE 一年一度的学术性会议&#xff0c;会议的主要内容是计算机视觉…

UNIX网络编程——fcntl函数

fcntl函数提供了与网络编程相关的如下特性&#xff1a;非阻塞式I/O。 通过使用F_SETFL命令设置O_NONBLOCK文件状态标志&#xff0c;我们可以把一个套接字设置为非阻塞型。信号驱动式I/O。 通过使用F_SETFL命令设置O_ASYNC文件状态标志&#xff0c;我们可以把一个套接字设置成O…

如何远程访问服务器的 Jupyter notebook

图来自 Unsplash 网站&#xff0c;作者&#xff1a;Christopher Gower2019 年第 52 篇文章&#xff0c;总第 76 篇文章本文大约 4600 字&#xff0c;阅读大约需要 12 分钟写在前面当我们拥有一台服务器的时候&#xff0c;通常服务器都可能包含比本地电脑比较好的配置&#xff0…

[Python技巧]如何加快循环操作和Numpy数组运算速度

2019 年第 53 篇文章&#xff0c;总第 77 篇文章本文大约 4200 字&#xff0c;阅读大约需要 11 分钟前言Python 虽然写起来代码量要远少于如 C,Java&#xff0c;但运行速度又不如它们&#xff0c;因此也有了各种提升 Python 速度的方法技巧&#xff0c;这次要介绍的是用 Numba …

ictclas4j 分词工具包 安装流程

首先把 ictclasj解压缩&#xff0c;然后 1.把 Data文件夹整个拷贝到 Eclipse项目的文件夹下, 2.而 bin目录下的 org文件夹整个拷贝到你 Eclipse项目的 bin目录下&#xff0c;&#xff08;将class文件存进去&#xff09; 3.把src目录下的org文件夹整个拷贝到 Eclipse项目 的src目…

[周末阅读]认知和规划,以及推荐几个入门教程Github

图片来自 Unsplash&#xff0c;作者&#xff1a; Rafael Saes 2019 年第 54 篇文章&#xff0c;总第 78 篇文章本文大约 4600 字&#xff0c;阅读大约需要 12 分钟前言本来预计每个周末一篇读后感&#xff0c;但从上次分享[周末阅读]如何培养你的自信和正确认识财富、创造财富&…

Android开发(一):android环境搭建

android开发环境搭建&#xff0c;图文并茂&#xff0c;推荐http://jingyan.baidu.com/article/f0062228f0b18afbd2f0c871.html 【SDK Manager.exe】安装过程遇到问题&#xff1a;【Android SDK Manager下载API时一直显示“Done loading packages”却迟迟不能前进......】 解决地…