重写(override)与重载(overload)
相似:他们都是重新定义一个方法的实现过程
区别:
重写(override):是指对象之间的某个方法的重新实现,在一个类继承一个类时,当基类中某方法申明为virtual或abstract时,在派生类中使用override关键字重新申明一个方法,注意该方法必须与基类中的参数返回值一样,一个类中对于基类某方法只能重写一次,调用基类还是派生类的实现是通过所定义的对象的类型来决定,和方法的参数无关
重载(overload):指对象中某个方法的重新实现,方法重载不需要关键字,只需要申明方法的参数类型或个数不一样即可,重载不能根据返回类型不同来重载,重载可以重载任意多次,没有限制.调用哪个重载方法只和调用时的参数有关系
(抽象)abstract和虚拟(virtual)
相似:在申明方法的时候,都能被重写
区别:
(抽象)abstract:可以申明类也可以申明方法,申明方法时不能和sealed一起申明,所申明的类必须被继承,申明的方法也必须被重写,申明时没有具体实现,实际上它起一个接口的作用
虚拟(virtual):只能申明方法,可以在申明方法的时候写对应的实现
类(class)和结构(struct)
相似:都是对象,就单个对象来说,类能实现的几乎结构都能实现
区别:
类:能被继承重写,可以有修饰申明(abstract,sealed),类实例化时使用的是栈中的内存(相对堆慢一点),类在赋值时,只是引用赋值(赋值后,改变被赋值对象的属性,其他跟着改)
结构:不能继承重写,不能有修饰,实例化使用的是堆中的内存(和普通变量一样),是值赋值
常数(const )和只读(readonly)
相似:相对于变量,其值基本不变
区别:
常数(const ):其值为硬编码,其值只能在申明时赋值,在类中使用const申明时,const好像隐式静态变量,每个实例不需要保存副本
只读(readonly):其值可以赋值,但只能在构造函数中赋值或申明时指定,申明为readonly的变量,每个类实例中可以有不同的副本
以上在《C#高级编程》中有介绍,下载见
http://bbs.wrclub.net/down/Cshappdf.rar