
·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 怎么样去理解抽象类
假如很多人要买水果吃,吃的动作只有一个,但是有的人要用现金买,有的人用信用卡,有的人赊帐。要为每个人定义一个类,就要定义多个相同的吃的方法。如果定义一个抽象类,在里面实现吃的方法,再做一个买的抽象方法。那每个人的类都从这个抽象类派生下来,只要实现买的方法即可,吃的方法就可以直接用父类的方法了。如果要改吃的方法就不用改多个,只要改这个抽象类里的就行了。
一个接口:
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修饰
抽象方法没有方法体
抽象类的派生类必须实现抽象方法体
抽象类只能作为基类,无法实例化。
重点就在于无法实例化,而且为了代码的清晰度,方便以后修改。