📅  最后修改于: 2023-12-03 15:30:19.289000             🧑  作者: Mango
C#中的方法重写和方法隐藏都是面向对象编程中常用的技术。虽然它们的作用和目的有些相似,但却存在一些重要的差别。
方法重写是在子类中重新定义父类中已经定义的方法的过程。重写的方法必须具有与父类方法相同的名称、参数类型和返回类型。
方法重写的主要作用是在子类中重新定义方法的操作方法,以适应子类的特殊需求。使用方法重写后,当对子类实例调用该方法时,编译器将自动识别子类定义的方法而不是父类定义的方法。
以下是一个方法重写的示例:
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal makes a sound");
}
}
class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Cat meows");
}
}
在上面的示例中,Cat
类重写了Animal
类中的MakeSound
方法,该方法在Cat
类中输出“Cat meows”,而不是Animal
类中的“Animal makes a sound”。
方法隐藏是在子类中重新定义父类中已经定义的方法的过程,但子类的新方法必须使用 new
关键字修饰。隐藏的方法必须具有与父类方法相同的名称和参数类型。
方法隐藏的主要目的是在子类中定义一个与父类方法相同的新方法,但不想重写父类方法或让其被子类方法挂接。使用方法隐藏后,当对子类实例调用该方法时,编译器将自动识别子类定义的方法而不是父类定义的方法。
以下是一个方法隐藏的示例:
class Animal
{
public void MakeSound()
{
Console.WriteLine("Animal makes a sound");
}
}
class Cat : Animal
{
public new void MakeSound()
{
Console.WriteLine("Cat meows");
}
}
在上面的示例中,Cat
类隐藏了Animal
类中的MakeSound
方法,该方法在Cat
类中输出“Cat meows”,而不是Animal
类中的“Animal makes a sound”。
虽然方法重写和方法隐藏的实现方式非常相似,但它们之间仍然存在一些重要的区别。
override
关键字来修饰,而方法隐藏使用 new
关键字来修饰。方法重写和方法隐藏是在 C# 中实现多态性的重要技术。两种技术都可以用于重新定义父类中的方法,以及在子类中添加新的方法。然而,它们之间存在一些基本的差异,需要程序员根据需要做出适当的选择。