1. 抽象方法 (abstract method)

在抽象类中,可以存在没有实现的方法,只是该方法必须声明为abstract抽象方法。

在继承此抽象类的类中,通过给方法加上override关键字来实现此方法. 由于该abstract method (抽象方法)是没有实现的方法,所以在子类中必须使用override关键字来重写此方法

抽象方法不提供自身的实现,并且强制子类重写

2. 虚方法 (virtual method)

2.1 虚方法,子类可以选择性重写此方法(用override关键字重写),也可以不重写. 它不像抽象方法,子类必须重写(如果子类不重写,那么子类也必须是抽象类)

2.2  虚方法可以有实体,所以可以直接调用

public virtual void Vt()

{

Console.WriteLine("this is virtual method");

}

2.3 虚方法可以实现多态。 而抽象方法不可以

虚方法提供自身的实现,并且不强制要求子类重写

3. 重载应该叫overload, 重写叫override

重载 (overload)某个方法是在同一个类中发生

重写 (override) 就是在子类中重写父类中的方法

3.1  重写(override)是用于重写基类的虚方法, 这样在派生类中提供一个新的方法

父类: public virtual string ToString(){return "a";}

子类  public override string ToString() {return "b";}

3.2  重载(overload)是提供一种机制,相同函数名通过不同的返回值类型以及参数列表来区分的机制

public string ToString(){return "a";}

public string ToString(int id){return id.ToString();}

很明显的区别---函数特征:

重写(override)的两个函数的函数特征相同, 或者说 有相同的函数签名

重载(overload)的两个函数的函数名虽然相同,但函数特征不同 (函数特征 包括函数名,返回值类型, 参数的类型和个数)。 函数签名不同

重写(override):

使用override修饰符来修改方法,属性,索引器或事件. 重写基方法必须与重写方法具有相同的签名

不能重写非虚方法或静态方法。 重写基方法必须是虚拟的,抽象的或重写的. 也就是说, 用override修饰符重写的基类中的方法必须是virtual, abstract或override的方法

重载(overload)

当类中包含两个名称相同,但签名不同的方法时,发生方法重载

使用重载(overload)方法的指南:

a. 用方法重载来提供在语义上完成相同功能的不同方法

b. 使用方法重载而不是允许默认参数。默认参数的版本控制性能不好,因此公共语言规范(CLS)中不允许使用默认参数。
    c. 正确使用默认值。在一个重载方法系列中,复杂方法应当使用参数名来指示从简单方法中假定的默认状态发生的更改。
    d. 对方法参数使用一致的排序和命名模式。提供一组重载方法,这组重载方法带有递增数目的参数,以使开发人员可以指定想要的级别的信息,这种情况很常见。您指定的参数越多,开发人员就可指定得越详细。
    e. 如果必须提供重写方法的能力,请仅使最完整的重载是虚拟的并根据它来定义其他操作。

比如下面的例子,具体解释了这样一种模式.     只有最后一个方法 (参数最完整的方法)是虚方法,在继承了这个类的子类中只要重写(override)这个方法就行了

public class SampleClass
{
private string myString; public SampleClass(string str)
{
this.myString = str;
} public int IndexOf(string s)
{
return IndexOf (s, );
} public int IndexOf(string s, int startIndex)
{
return IndexOf(s, startIndex, myString.Length - startIndex );
} public virtual int IndexOf(string s, int startIndex, int count)
{
return myString.IndexOf(s, startIndex, count);
}
}

最新文章

  1. vs2013给项目统一配置boost库
  2. Atitit 编程语言常用算法attilax总结
  3. jvm 监控
  4. C语言中数据类型取值范围的计算的理解与总结
  5. [ZOJ 1002] Fire Net (简单地图搜索)
  6. mysql中自己定义函数编程
  7. Java [Leetcode 226]Invert Binary Tree
  8. SQLServer 2000个人版下载
  9. dvd的舞女
  10. 01串(dp)
  11. 【deep learning学习笔记】Recommending music on Spotify with deep learning
  12. XML读写文件辅助类
  13. JavaScript DOM编程艺术-学习笔记(第十章、第十一章)
  14. Ugly Problem
  15. JAVA基础知识面试题
  16. python for循环的遍历
  17. 使用session和cookie实现用户登录:一个登录页面,一个servlet,一个登录成功页面
  18. discuzX3.4安装之后,没有任何样式怎么办?
  19. LCD调试1.0
  20. 树莓派.Qt.打包开发好的程序并运行的方法

热门文章

  1. 【BZOJ3291】Alice与能源计划 二分图最大匹配
  2. 【BZOJ3671】[Noi2014]随机数生成器 暴力
  3. 九度OJ 1066:字符串排序 (排序)
  4. 常用BAPI list
  5. ftl总结
  6. 我所理解的RESTful Web API [设计篇]【转】
  7. highChart数据动态更新
  8. linux svn yum 安装、开机自启动
  9. leetcode 23. Merge k Sorted Lists(堆||分治法)
  10. js图片上传及显示