在C#中,Override关键字和New关键字都用于重写父类成员。但是,它们的用法和效果有所不同。本文将详细介绍Override关键字和New关键字的用法和区别。
Override关键字
Override关键字用于重写父类的虚方法或抽象方法。以下是一个示例:
class Animal {
public virtual void Speak() {
Console.WriteLine("Animal speaks");
}
}
class Dog : Animal {
public override void Speak() {
Console.WriteLine("Dog barks");
}
}
class Cat : Animal {
public override void Speak() {
Console.WriteLine("Cat meows");
}
}
Animal animal = new Animal();
Dog dog = new Dog();
Cat cat = new Cat();
animal.Speak(); // 输出 "Animal speaks"
dog.Speak(); // 输出 "Dog barks"
cat.Speak(); // 输出 "Cat meows"
在上面的示例中,Animal类定义了一个虚方法Speak,Dog类和Cat类都重写了这个方法。当调用Speak方法时,会根据实际对象的类型调用相应的方法。
New关键字
New关键字用于隐藏父类的成员。以下是一个示例:
class Animal {
public void Speak() {
Console.WriteLine("Animal speaks");
}
}
class Dog : Animal {
public new void Speak() {
Console.WriteLine("Dog barks");
}
}
class Cat : Animal {
public new void Speak() {
Console.WriteLine("Cat meows");
}
}
Animal animal = new Animal();
Dog dog = new Dog();
Cat cat = new Cat();
animal.Speak(); // 输出 "Animal speaks"
dog.Speak(); // 输出 "Dog barks"
cat.Speak(); // 输出 "Cat meows"
Animal dog2 = new Dog();
Animal cat2 = new Cat();
dog2.Speak(); // 输出 "Animal speaks"
cat2.Speak(); // 输出 "Animal speaks"
在上面的示例中,Animal类定义了一个Speak方法,Dog类和Cat类都使用New关键字隐藏了这个方法。当调用Speak方法时,会根据变量的类型调用相应的方法。但是,当使用父类的变量引用子类的对象时,会调用父类的方法。
Override和New关键字的区别
Override关键字和New关键字都用于重写父类成员,但是它们的用法和效果有所不同。以下是它们的区别:
- Override关键字用于重写父类的虚方法或抽象方法,可以实现多态性。New关键字用于隐藏父类的成员,不会实现多态性。
- Override关键字会覆盖父类的方法实现,而New关键字会隐藏父类的方法实现。
- Override关键字可以使用base关键字调用父类的方法,而New关键字不能使用base关键字调用父类的方法。
总之,Override关键字和New关键字都用于重写父类成员,但是它们的用法和效果有所不同。开发者应该根据实际情况选择最适合自己的关键字,并据需要其他自定义功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中Override关键字和New关键字的用法详解 - Python技术站