目录
【C#】重写和重载的区别
重载
作用:方便调用时候,不用记住很多的函数方法名字,减少调用复杂性
1.首先解释一下什么是方法重载?
方法重载是指在同一个类中方法同名,参数不同,调用时根据实
参的形式,选择与他匹配的方法执行操作的一种技术。
2.这里所说的参数不同是指以下几种情况:
- 参数的类型不同
- 参数的个数不同
- 参数的个数相同时他们的先后顺序不同
注意:系统会认为是同一个方法的两种情况,这样的两个方法不可以在同一个类里,否则系统会报错。
- 返回类型不同,方法名和参数个数、顺序、类型都相同的两个方法
- 返回类型相同,方法名和参数的个数、顺序、类型都相同的两个方法,但是参数的名字不同
3.重载的作用
- 方法重载的主要好处就是不用为了对不同的参数类型或参数个数,而写多个函数。多个函数用同一个名字,但参数表,即参数的个数或(和)数据类型可以不同,调用的时候,虽然方法名字相同,但根据参数表可以自动调用对应的函数。这样我们在调用的时候,就不需要记那么多的方法名称,而是知道了方法的功能就可以直接的给他传递不同的参数,编译器会明确的知道我们调用了哪一个方法。
- 重载的最直接作用是方便了程序员可以根据不同的参数个数,顺序,类型,自动匹配方法,减少写过个函数名或方法名的重复步骤
4.代码示例
using System;
namespace stars
{
class Test
{
public Test()
{
Console.WriteLine("Hello");
}
public Test(string name)
{
Console.WriteLine("Hello " + name);
}
public Test(string name, int age)
{
Console.WriteLine("Hello " + name + "," + age);
}
public Test(string name, int age, double height)
{
Console.WriteLine("Hello " + name + "," + age + '-' + height);
}
}
}
在 Main 方法中分别通过上面定义的构造器创建类的对象,代码如下。
using System;
namespace stars
{
public class Class1
{
static void Main(string[] args)
{
Test say1 = new Test();
Test say2 = new Test("小明");
Test say3 = new Test("张三", 20);
Test say4 = new Test("张三", 20, 174);
}
}
}
/*
//运行结果
Hello
Hello 小明
Hello 张三,20
Hello 张三,20-174
*/
重写
1.首先解释一下什么是方法重写?
“重写”父类方法就是修改它的实现方式或者说在子类中对它进行重新编写。当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。
2.重写的实现方法。
通常,派生类继承基类的方法。因此,在调用对象继承方法的时候,调用和执行的是基类的实现。但是,有时需要对派生类中的继承方法有不同的实现。 比如动物都有“叫”的方法。猫和狗是它的子类,猫的叫声是“喵”,狗的叫声是“汪”,如何在子类中重写父类的方法呢?首先在动物类中构造一个虚方法。 在构建猫这个类时,我们重写“叫”这个方法,在构建狗这个类时,我们也重写“叫”这个方法。
3.重写的特征。
- 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
- 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
- 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
4.重写的代码示例
using System;
namespace stars
{
class Test
{
static void Main(string[] args)
{
my HHX = new my();
HHX.test();
}
public class To
{
public virtual void test()
{
Console.WriteLine("纳米盒宋");
}
}
public class my : To
{
public override void test()
{
Console.WriteLine("嗨侯");
}
}
}
}
运行结果:
嗨侯
区别