免费个人网页制作网站,一个简单的html网页,怎么制作三屏壁纸,深圳设计收费标准在C#中子类继承抽象类的时候#xff0c;new 和override都可以用来修饰子类方法#xff0c;但两者之间是有区别的。
相同点#xff1a;
它们都是子类在覆写基类方法时#xff0c;修饰子类同名方法用的#xff0c;都是为了隐藏基类的同名方法在实例化子类对象的时候#…在C#中子类继承抽象类的时候new 和override都可以用来修饰子类方法但两者之间是有区别的。
相同点
它们都是子类在覆写基类方法时修饰子类同名方法用的都是为了隐藏基类的同名方法在实例化子类对象的时候访问的都是子类的方法都可以在方法体中通过base来访问基类的方法
不同点
override用于重写基类的virtual方法必须要申明override关键字而new可以省略override会覆盖掉基类的同名方法除非是在子类方法中用base访问基类方法除此以外再也无法访问基类方法。而new还是可以用通过其它方法访问到基类方法
怎么选择new还是override
我们通常认为基类的virtual方法是不完善的只提供了基础的的申明和实现override的方法通常才是完善和可用一般不希望去调用基类的虚方法所以当我们只是需要这样简单的约定的时候就会采用override的方式来覆写什么时候用new当基类的方法已经很完善并且有可能在某种情况下需要调用的时候我们就用new这个时候new只是作为一种隐藏基类的方法和对基类同名方法的进一步扩展基类的方法同样是有意义并且可以被调用的 下面是代码示例
using System;
namespace TestNamespace
{// 基类public abstract class BaseClass{public string DoSomething(){return BaseClass.DoSomething();}public virtual string DoSomething2(){return BaseClass.DoSomething()2;}}// 子类public partial class ChildClass : BaseClass{public new string DoSomething(){return ChildClass. DoSomething();//return base.DoSomething();}public override string DoSomething2(){return ChildClass. DoSomething()2;//return base.DoSomething2();} }
}调用方法
/
ChildClass child new ChildClass();
child.DoSomething(); // 调用子类同名方法DoSomething()
child.DoSomething2() // 调用子类同名方法DoSomething2()/
BaseClass child new ChildClass();
child.DoSomething(); // 调用基类同名方法DoSomething()
child.DoSomething2() // 调用子类同名方法DoSomething2()
从上面的代码示例中可以发现一旦基类的虚方法被override我们就无法再访问基类的DoSomething()方法除非是在子类方法中用base.DoSomething()去访问但对于new修饰的子类同名方法我们还是可以访问。