c#:浅析方法重载和重写
本篇文章主要分析c#中方法重载和方法重写的一些含义、用法、示例以及区别等……希望能够帮到您!
一重载(overload)
1、描述
在面向对象的语言中,允许我们在同一个类中定义多个方法名相同、参数列表(参数类型,参数个数)不同的方法,这样的形式我们称为方法重载。调用时编译器会根据实际传入参数的形式,选择与其匹配的方法执行。
2、构造函数重载的条件
(1)**前提:**在一个类中
(2)**其次:**构造函数方法名相同
(3)构造函数参数(形参)列表不同(参数类型不同,参数个数不同)以及
(4)**注意:两个方法中的参数类型、参数数量相同时,顺序不同是不能造成重载的,反而会报错
正确示例:
错误示例:
3、方法重载的条件
(1)**前提:**在同一个类中
(2)**其次:**方法名相同
(3)参数(形式参数)列表不同(参数的类型不同、参数的个数不同)
(4)返回值类型可以不同,也可以相同
正确示例:
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)
1、描述
重写可以大致理解为:我觉得你的不好,我要重新弄一个推翻你的定义。重写是出现在继承中的
2、方法重写的条件
(1)**前提:**发生在继承关系中,是派生类重写基类的方法
(2)**其次:**要求修饰符、方法名、以及返回值类型相同
(3)重写时,基类要有使派生类重写的修饰符,而派生类也要有重写修饰符override
(4)重写后,派生类的方法就覆盖了基类的方法
正确示例:
//基类
class Person
{
public virtual void Ak()//使用virtual使方法Ak成为虚方法
{
Console.WriteLine("我是基类方法Ak");
}
}
class Student:Person
{
public override void Ak()//使用override关键字告诉程序我要重写基类的Ak方法
{
Console.WriteLine("我是派生类方法Ak");
}
}
3、两种方法使派生类重写基类方法
(1)abstract关键字,使基类方法称为虚方法,此时基类必须为抽象类
(2)virtual关键字,使基类的方法称为虚方法,本篇文章用的就是virtual关键字
需要详细了解的话,可以阅读本人的其他博客:
c#关键字—virtual浅见 以及 c#中抽象类的使用和示例,相信会对你有很大帮助
4、方法重写和重载的区别
**(1)相同点:**方法名都相同,访问修饰符相同
(2)不同点:
1、重载:是在一个类中,并且参数列表不同(参数类型、参数个数)返回值类型没有要求,不用使用关键字就可以重载
**2、重写:**不在一个类中,是继承关系,参数列表相同,返回值类型相同,需要使用关键字才能重写
注:从上文可以看出,方法重写的要求要比方法重载苛刻
本篇文章出于自己对c#中方法重载和方法重写的一点理解,如果有不完善的地方,或者有错误的地方,还请各位朋友能够指出,希望大家的努力都i有很大收获和成就,谢谢!