引言:
设计模式已经学过一段时间了,今天师傅给验收问了几个问题,与其说是忘了,不如说当时就没有搞明白了,欠的总是要还的,慢慢补回来,先从重载和重写的区别开始,于是又回头看了看大话并查了查资料,这才明白是什么东东!
重载(overload):
方法重载提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型。
例子:关于小猫有没有起好名字的讨论
class Cat
{
private string name=""
public Cat(string name)
{
this.name=name;
}
//构造方法重载
public Cat()
{
this.name="无名"
}
}
方法重载提供了函数可扩展的能力,如果小猫起好了名字,就用带string参数的构造方法,如果没有,就用不带参数的;如果需要分清楚猫的姓和名,可以重载一个public Cat (string firstName,string lastName)
规则:
在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)
重写(override):
定义:指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。
格式:
基类
public virtual void myMethod()
{
}
子类
public override void myMethod()
{
}
规则:
1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
3、重写的方法的返回值必所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
4、重写的方法须和被重写的方法的返回一致;
5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
6、静态方法不能被重写为非静态的方法(会编译出错)。
总结:
1、学习是个反复的过程
2、不能总是盲人摸象的状态
格式指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。