C#中的overrid和new修饰符都与方法的继承、覆盖相关。它们之间的区别在于,使用overrid修饰符时,子类将重写从基类中继承的方法,而使用new修饰符时,子类将创建一个新的方法,覆盖了基类中的同名方法。
下面通过两个示例来说明这两个修饰符的不同之处:
示例一:using override
class Animal{
public virtual void Eat(){
Console.WriteLine("Animal Eat");
}
}
class Dog : Animal{
public override void Eat(){
Console.WriteLine("Dog Eat");
}
}
class Program{
static void Main(string[] args){
Animal ani = new Dog();
ani.Eat(); // "Dog Eat"
}
}
在这个示例中,我们定义了Animal类和Dog类。Animal类中有一个虚方法Eat(),在Dog类中我们使用override修饰符重写了该方法。在Main方法中,我们创建了一个Dog对象,并将其强制转换成Animal类型的对象。当调用Animal对象的Eat()方法时,实际上调用的是Dog类中的重写方法。因此,控制台输出的是"Dog Eat"。
示例二:using new
class Apple{
public void Dispose(){
Console.WriteLine("Apple disposed");
}
}
class RedApple : Apple{
new public void Dispose(){
Console.WriteLine("RedApple disposed");
}
}
class Program{
static void Main(string[] args){
Apple app = new RedApple();
app.Dispose(); // "Apple disposed"
RedApple rApp = new RedApple();
rApp.Dispose(); // "RedApple disposed"
}
}
在这个示例中,我们定义了Apple类和RedApple类。Apple类中有一个虚方法Dispose()。在RedApple类中,我们使用new修饰符创建了一个新的Dispose()方法。在Main方法中,我们创建了一个RedApple对象,并将其强制转换成Apple类型的对象。当调用Apple对象的Dispose()方法时,实际上调用的是基类中的Dispose()方法。控制台输出的是"Apple disposed"。而当我们直接调用RedApple对象的Dispose()方法时,实际上调用的是子类中的Dispose()方法,所以控制台输出的是"RedApple disposed"。
因此,overrid修饰符表示子类将重写基类的方法,并提供新的实现。而new修饰符表示子类将覆盖基类方法并提供自己的实现。这两个修饰符的区别在于它们对于派生类的基类方法的处理方式不同。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中overrid和new修饰符有什么不同 - Python技术站