.NET 重写 Override 覆盖 new 重载 Overload ,父类与子类互转

在这里插入图片描述

C#中的重写和覆盖的区别
#中重写(override)和覆盖(new)的区别
重写
用关键字 virtual 修饰的方法,叫虚方法。可以在子类中用override 声明同名的方法,这叫“重写”。相应的没有用virtual修饰的方法,我们叫它实方法。
重写会改变父类方法的功能。
重载与覆盖的区别?

答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系

2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。

3、覆盖要求参数列表相同;重载要求参数列表不同。

4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调 用时的实参表与形参表来选择方法体的。
看下面演示代码:
#region 重写

public class C1
{
    public virtual string GetName()
    {
        return "AAA";
    }
}

public class C2 : C1
{
    public override string GetName()
    {
        return "aaa";
    }
}

 C1 c1 = new C1();
 Console.WriteLine(c1.GetName());//输出“AAA”

 C2 c2 = new C2();
 Console.WriteLine(c2.GetName());//输出“aaa”
 //重点看这里
 C1 c3 = new C2();
 Console.WriteLine(c3.GetName());//输出“aaa”

#endregion
 
覆盖
在子类中用 new 关键字修饰 定义的与父类中同名的方法,叫覆盖。
覆盖不会改变父类方法的功能。
看下面演示代码:
#region 覆盖

public class C1
{
    public string GetName()
    {
        return "AAA";
    }
}

public class C2 : C1
{
    public new string GetName()
    {
        return "aaa";
    }
}

C1 c1 = new C1();
Console.WriteLine(c1.GetName());//输出“AAA”

C2 c2 = new C2();
Console.WriteLine(c2.GetName());//输出“aaa”
//重点看这里,和上面的重写作比较
C1 c3 = new C2();
Console.WriteLine(c3.GetName());//输出“AAA”

#endregion
 
总结
1:不管是重写还是覆盖都不会影响父类自身的功能。
2:当用子类创建父类的时候,如 C1 c3 = new C2(),重写会改变父类的功能,即调用子类的功能;而覆盖不会,仍然调用父类功能。
3:虚方法、实方法都可以被覆盖(new),抽象方法,接口 不可以。
4:抽象方法,接口,标记为virtual的方法可以被重写(override),实方法不可以。
5:重写使用的频率比较高,实现多态;覆盖用的频率比较低,用于对以前无法修改的类进行继承的时候。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

重写

不能重写非虚方法或静态方法。
重写的基方法必须是 virtual、abstract 或 override 的。为什么 override 也可以重写呢?因为基类中的 override 实际上是对基类的基类进行的重写,由于继承可传递,所以也可以对基类中 override 的方法进行重写。
override 声明不能更改 virtual 方法的可访问性。
override 方法和 virtual 方法必须具有相同的访问级别修饰符。
不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。
重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,
并且被重写的属性必须是 virtual、abstract 或 override 的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值