怎么样去理解抽象类
2018-06-22 06:31:37来源:未知 阅读 ()
假如很多人要买水果吃,吃的动作只有一个,但是有的人要用现金买,有的人用信用卡,有的人赊帐。要为每个人定义一个类,就要定义多个相同的吃的方法。如果定义一个抽象类,在里面实现吃的方法,再做一个买的抽象方法。那每个人的类都从这个抽象类派生下来,只要实现买的方法即可,吃的方法就可以直接用父类的方法了。如果要改吃的方法就不用改多个,只要改这个抽象类里的就行了。
一个接口:
public interface IGrabber { /// <summary> /// 是否可用。 /// </summary> bool Enabled { get; set; } /// <summary> /// 抓取器名。 /// </summary> string Name { get; set; } /// <summary> /// 源字符串最大长度。 /// </summary> uint MaxSourceLength { get; set; } /// <summary> /// 源字符串最小长度。 /// </summary> uint MinSourceLength { get; set; } /// <summary> /// 抓取。 /// </summary> /// <param name="source">要抓取的源。</param> /// <param name="target">抓取结果。</param> /// <returns>是否抓取成功。</returns> bool Grab(string source, out string[] targets); /// <summary> /// 抓取。 /// </summary> /// <param name="source">要抓取的源。</param> /// <param name="targets">抓取结果。</param> /// <returns></returns> bool Grab(IList<Keys> source, out string[] targets)
一个抽象类:
public abstract class BaseGrabber : IGrabber { #region IGrabber成员。 public virtual bool Enabled { get; set; } public virtual string Name { get; set; } public virtual uint MaxSourceLength { get; set; } public virtual uint MinSourceLength { get; set; } public abstract bool Grab(string source, out string[] targets); public abstract bool Grab(IList<Keys> source, out string[] targets); #endregion /// <summary> /// 是否重构数据源(识别方向键、删除键等按键对输入字符的影响,返回真实的输入项)。 /// </summary> public virtual bool IsRestructured { get; set; } protected BaseGrabber() { this.Name = this.GetType().Name; this.MinSourceLength = 0; this.MaxSourceLength = 256; this.Enabled = true; this.IsRestructured = true; } /// <summary> /// 重构数据源(识别方向键、删除键等按键对输入字符的影响,返回真实的输入项)。 /// </summary> /// <param name="source"></param> /// <returns></returns> public virtual string RestructureSource(string source) { return source; } /// <summary> /// 重构数据源(识别方向键、删除键等按键对输入字符的影响,返回真实的输入项)。 /// </summary> /// <param name="source"></param> /// <returns></returns> public virtual IList<Keys> RestructureSource(IList<Keys> source) { int count = source.Count; for (int i = 0; i < count; i++) { Keys key = source[i]; switch (key) { case Keys.Back: source.RemoveAt(i); source.RemoveAt(i - 1); i -= 2; count -= 2; break; } } return source; }
终于搞明白了,还是上面那个例子说的是在。从接口到抽象类,在从抽象类到类,在类到对象。这就是面向对象。
下面是有关抽象类的一些基本感念:
抽象类与抽象方法由abstract修饰
抽象方法没有方法体
抽象类的派生类必须实现抽象方法体
抽象类只能作为基类,无法实例化。
重点就在于无法实例化,而且为了代码的清晰度,方便以后修改。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- c#基础系列2---深入理解 String 2018-09-10
- Ioc原理理解 2018-08-26
- 第十五节:深入理解async和await的作用及各种适用场景和用法 2018-07-03
- Asp.Net 设计模式 之 “工厂方法”即利用 接口 实现的抽象工 2018-06-22
- [ASP.NET][Session] 使用 SQLServer 会话管理解决 Session 2018-06-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash