一重载(overload)
1.1、描述
在面向对象的语言中,允许我们在同一个类中定义多个方法名相同、参数列表(参数类型,参数个数)不同的方法,这样的形式我们称为方法重载。调用时编译器会根据实际传入参数的形式,选择与其匹配的方法执行。
1.2、构造函数重载的条件
(1)**前提:**在一个类中
(2)**其次:**构造函数方法名相同
(3)构造函数参数(形参)列表不同(参数类型不同,参数个数不同)以及
(4)**注意:两个方法中的参数类型、参数数量相同时,顺序不同是不能造成重载的,反而会报错
1.3 构造函数重载样列
1.4、方法重载的条件
(1)**前提:**在同一个类中
(2)**其次:**方法名相同
(3)参数(形式参数)列表不同(参数的类型不同、参数的个数不同)
(4)返回值类型可以不同,也可以相同
1.5 方法重载样例
class Person
{
//定义的字段
private string name;
private string sex;
private string xm;
private int age;
private double height;
private double weight;
//方法重载开始 一共4个方法同名方法
public void Name(){}
public void Name(string name, string sex,string xm) { }
public void Name(double height,double weight) { }
public string Name(string name)
{
return this.name = name;
}
}
调用案例
**注意:**两个方法中的参数类型、参数数量相同时,顺序不同是不能造成重载的,反而会报错
二、重写(override)
2.1、描述
重写可以大致理解为:我觉得你的不好,我要重新弄一个推翻你的定义。重写是出现在继承中的
2.2、方法重写的条件
(1)**前提:**发生在继承关系中,是派生类重写基类的方法
(2)**其次:**要求修饰符、方法名、以及返回值类型相同
(3)重写时,基类要有使派生类重写的修饰符,而派生类也要有重写修饰符override
(4)重写后,派生类的方法就覆盖了基类的方法
2.3、 样列
//基类
class Person
{
public virtual void Ak()//使用virtual使方法Ak成为虚方法
{
Console.WriteLine("我是基类方法Ak");
}
}
class Student:Person
{
public override void Ak()//使用override关键字告诉程序我要重写基类的Ak方法
{
Console.WriteLine("我是派生类方法Ak");
}
}
2.4、两种方法使派生类重写基类方法
(1)abstract关键字,使基类方法称为虚方法,此时基类必须为抽象类
(2)virtual关键字,使基类的方法称为虚方法,本篇文章用的就是virtual关键字
需要详细了解的话,可以阅读本人的其他博客:
c#关键字—virtual浅见 以及 c#中抽象类的使用和示例,相信会对你有很大帮助
三、方法重写和重载的区别
3.1 相同点
**方法名都相同,访问修饰符相同
3.2 不同点
1、重载:是在一个类中,并且参数列表不同(参数类型、参数个数)返回值类型没有要求,不用使用关键字就可以重载
**2、重写:**不在一个类中,是继承关系,参数列表相同,返回值类型相同,需要使用关键字才能重写