📜  C#中的方法重写和方法隐藏之间的区别(1)

📅  最后修改于: 2023-12-03 15:30:19.289000             🧑  作者: Mango

C#中的方法重写和方法隐藏之间的区别

C#中的方法重写和方法隐藏都是面向对象编程中常用的技术。虽然它们的作用和目的有些相似,但却存在一些重要的差别。

方法重写 (Method Overriding)

方法重写是在子类中重新定义父类中已经定义的方法的过程。重写的方法必须具有与父类方法相同的名称、参数类型和返回类型。

方法重写的主要作用是在子类中重新定义方法的操作方法,以适应子类的特殊需求。使用方法重写后,当对子类实例调用该方法时,编译器将自动识别子类定义的方法而不是父类定义的方法。

以下是一个方法重写的示例:

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”。

方法隐藏 (Method Hiding)

方法隐藏是在子类中重新定义父类中已经定义的方法的过程,但子类的新方法必须使用 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# 中实现多态性的重要技术。两种技术都可以用于重新定义父类中的方法,以及在子类中添加新的方法。然而,它们之间存在一些基本的差异,需要程序员根据需要做出适当的选择。