前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抽象类总结及练习

抽象类总结及练习

作者头像
写代码的猿
发布2019-04-11 14:42:28
4020
发布2019-04-11 14:42:28
举报
文章被收录于专栏:平凡少年平凡少年

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

什么是抽象类

用关键字abstract定义的类即为抽象类,且只能作为基类。

抽象类注意的地方

1、  用abstract定义的类不一定包含抽象方法,也可以包含非抽象方法。

2、abstract定义的方法一定包含在抽象类中。

3、抽象类不能被实例,只能被继承并且派生类需要重写(overriding)抽象类中的抽象方法。

4、抽象类不能定义为密封类(sealed)

5、  如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。

实例

下面我通过一个简单的例子说明一下抽象类的使用场景。

假入我们的系统中所有进行ajax交互的后台文件都是xxxx.ashx(一般处理文件),此时我们就可以写一个BaseHandler的抽象类提供其他xxxx.ashx文件中的类继承,这样我们就可以在BaseHandler中进行统一的公共处理,如错误处理等,还可以让所有的派生类都必须实现BaseHandler中的抽象方法,这样就可以使所有的派生类看起来非常统一,有助于代码从高层次角度进行规范,不罗嗦了上代码。

1、BaseHandler代码

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
<script type="text/javascript">

        $.post("DataService.ashx", { "method": "HellWord" }, function (json) { alert(json) });

</script>

参数method的值说明了要调用的方法为HellWord()

读完这篇文章希望对大家理解抽象函数有一定的帮助。欢迎大家补充更正。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-07-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档