在派生 class 中覆盖 toString

Overriding toSting in derived class

我有一个摘要classAnimal看起来像这样

abstract class Animal{
    protected int numberOfPaws;

    public abstract String speak();

    public String toString(){
        return "I have " + numberOfPaws + " paws";
    }
}

然后我有一个派生的 class,它有一个 toString() 的新实现,看起来像这样

class Cow : Animal{
    public Cow : base(4) {}

    public override String speak(){
        return "Moo!";
    }

    public new Strinf toString(){
        return "I am a Cow " + base.toString();
    }
}

我有一个看起来像这样的主

void Main{
    Cow c = new Cow();

    Console.WriteLine(c.toString());
}

但是当我 运行 它打印 UserQuery+Cow 到控制台。

我不知道我做错了什么?这样做是因为 base.toString() 吗?

使用override关键字:

abstract class Animal
{
    protected int numberOfPaws;

    public abstract String speak();

    public override string ToString(){
        return "I have " + numberOfPaws + " paws";
    }
}

class Cow : Animal
{
    public Cow : base(4) {}

    public override String speak(){
        return "Moo!";
    }

    public override string ToString(){
        return "I am a Cow " + base.ToString();
    }
}

您应该阅读此处:How To: Override the ToString Method

public override string ToString() 
{
    return "I have " + numberOfPaws + " paws";
}

您错过了 override 关键字