假如很多人要买水果吃,吃的动作只有一个,但是有的人要用现金买,有的人用信用卡,有的人赊帐。要为每个人定义一个类,就要定义多个相同的吃的方法。如果定义一个抽象类,在里面实现吃的方法,再做一个买的抽象方法。那每个人的类都从这个抽象类派生下来,只要实现买的方法即可,吃的方法就可以直接用父类的方法了。如果要改吃的方法就不用改多个,只要改这个抽象类里的就行了。
一个接口:
publicinterfaceIGrabber
{///<summary>///是否可用。///</summary>boolEnabled
{get;set;
}///<summary>///抓取器名。///</summary>stringName
{get;set;
}///<summary>///源字符串最大长度。///</summary>uintMaxSourceLength
{get;set;
}///<summary>///源字符串最小长度。///</summary>uintMinSourceLength
{get;set;
}///<summary>///抓取。///</summary>///<param name="source">要抓取的源。</param>///<param name="target">抓取结果。</param>///<returns>是否抓取成功。</returns>boolGrab(stringsource,outstring[] targets);///<summary>///抓取。///</summary>///<param name="source">要抓取的源。</param>///<param name="targets">抓取结果。</param>///<returns></returns>boolGrab(IList<Keys> source,outstring[] targets)
一个抽象类:
publicabstractclassBaseGrabber : IGrabber
{#regionIGrabber成员。publicvirtualboolEnabled
{get;set;
}publicvirtualstringName
{get;set;
}publicvirtualuintMaxSourceLength
{get;set;
}publicvirtualuintMinSourceLength
{get;set;
}publicabstractboolGrab(stringsource,outstring[] targets);publicabstractboolGrab(IList<Keys> source,outstring[] targets);#endregion///<summary>///是否重构数据源(识别方向键、删除键等按键对输入字符的影响,返回真实的输入项)。///</summary>publicvirtualboolIsRestructured
{get;set;
}PRotectedBaseGrabber()
{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>publicvirtualstringRestructureSource(stringsource)
{returnsource;
}///<summary>///重构数据源(识别方向键、删除键等按键对输入字符的影响,返回真实的输入项)。///</summary>///<param name="source"></param>///<returns></returns>publicvirtualIList<Keys> RestructureSource(IList<Keys>source)
{intcount =source.Count;for(inti =0; i < count; i++)
{
Keys key=source[i];switch(key)
{caseKeys.Back:
source.RemoveAt(i);
source.RemoveAt(i-1);
i-=2;
count-=2;
break;
}
}returnsource;
}
终于搞明白了,还是上面那个例子说的是在。从接口到抽象类,在从抽象类到类,在类到对象。这就是面向对象。
下面是有关抽象类的一些基本感念:
抽象类与抽象方法由abstract修饰
抽象方法没有方法体
抽象类的派生类必须实现抽象方法体
抽象类只能作为基类,无法实例化。
重点就在于无法实例化,而且为了代码的清晰度,方便以后修改。