在不同的子类中多次覆盖问题

时间:2019-01-30 14:27:41

标签: c# override

使用此行代码时,在taskArray [i] = animalList [i]。((Animal)animalObj).ToString();的行上的“。”之前收到错误消息“ Indentifier Expected”。 ((动物)。此方法应该根据用户输入的内容使用ToString方法,因为可以调用多个子类。动物:哺乳动物和动物:昆虫是我目前拥有的,我需要能够使用ToString取决于我在Animal animalObj内部发送的内容。

如果还有其他方法可以让程序知道我希望它调用哪个ToString方法,那么仅使用.ToString()即可正常工作并执行idk。

    public string ListToStringArray(int x, Animal animalObj)
    {
        string[] taskArray = new string[Count];// makes another array the size of the list

        for (int i = 0; i < Count; i++) //does a loop equal to the amonut of items in the list
        {
            taskArray[i] = animalList[i].((Animal)animalObj).ToString(); //puts the values inside the list into the array 

        }
        return taskArray[x]; //returns the array number which the method calls 
    }

2 个答案:

答案 0 :(得分:3)

是的,语法不正确,您要使用:

taskArray[i] = animalList[i].ToString();
  

是的,但是我在项目中有多个ToString()方法。怎么样   程序会知道使用哪个吗?

您已评论animalListList<Animal>。因此,这将调用此列表中实际类中覆盖的ToString。例如,如果您有以下动物:

abstract class Animal
{
    public override string ToString()
    {
        return "I'm just an animal, no idea what i am actually";
    }
}

class Lion : Animal
{
    public override string ToString()
    {
        return "ROAR!!!";
    }
}
class Giraffe : Animal
{
    public override string ToString()
    {
        return "[Donno what noise a giraffe makes]";
    }
}

class Meerkat: Animal
{
    // no ToString
}

然后输入以下代码

var animalsList = new List<Animal> {new Lion(), new Giraffe(), new Meerkat()};
animalsList.ForEach(a => Console.WriteLine(a.ToString()));

输出

ROAR!!!
[Donno what noise a giraffe makes]
I'm just an animal, no idea what i am actually

您会看到,即使列表被声明为ToString,也总是会调用被覆盖的List<Animal>。这就是继承在C#中的工作方式。

如果不覆盖它,您将从System.Object中获得一个,它仅返回该对象类型的完全限定名称。

答案 1 :(得分:0)

animalList[i].((Animal)animalObj).ToString();

在animalList [i]之后是无效的语法。您只能放置方法,字段或属性。喜欢:

animalList[i].ToString();

或:

animalList[i].Name;

以此类推。