我们可以重载被覆盖的方法吗?

时间:2014-12-24 10:25:41

标签: c# oop inheritance overloading

我是C#的新手。我理解继承的概念。我试图知道被覆盖的方法是否可以超载,我用谷歌搜索它但不能找到一个好的答案。我也尝试使用以下代码。在代码中,我正在访问重载方法的重载方法,当我调试这个程序时,它不会在屏幕上返回任何输出。所以我对被覆盖的方法是否可以重载感到困惑?

public class method1
{
    public virtual void PrintName()
    {
        Console.WriteLine("Hello world");
    }
}

public class method2 : method1
{
    public override void PrintName()
    {
        Console.WriteLine("Hello World Overriden");
    }

    public string PrintName(String strPolymorphism)
    {
        return strPolymorphism;
    }
}

class Program
{
    static void Main(string[] args)
    {
        method2 m2 = new method2();
        m2.PrintName("method overloading is possible?");
    }
}

3 个答案:

答案 0 :(得分:5)

您正在做的是overloading而非覆盖。您可以根据需要多次添加具有相同名称和不同签名的方法。

在您的方法中,您只是返回string而不显示它。该方法与其他需要0参数的重载无关。

答案 1 :(得分:1)

您的m2.PrintName只返回收到的字符串。它没有做任何事情。如果你这样做,你会看到输出。

public string PrintName(String strPolymorphism)
{
    this.PrintName(); // first write the output of `PrintName` to the console

    Console.WriteLine("Called PrintName with: " + strPolymorphism);
    return strPolymorphism;
}

您的超载 m2.PrintName与您的已覆盖的 PrintName方法无关,而method2或{中的签名不同{1}}课程。签名很重要。很多!

答案 2 :(得分:0)

来自C#标准

  

重载方法允许类,结构或接口声明具有相同名称的多个方法,前提是它们的签名在该类,结构或接口中是唯一的。

只要签名在类中是唯一的,就可以重载该方法,不考虑基类。没有打印的原因是因为在重载方法中你只是返回传入的值而不是打印它。

public string PrintName(String strPolymorphism)
{
    return strPolymorphism; // Do you mean Console.WriteLine(strPolymorphism);
}