Да, синтаксис неправильный, вы хотите использовать:
taskArray[i] = animalList[i].ToString();
Да, но у меня есть несколько ToString()
методов внутри проекта.Как программа узнает, какой из них использовать?
Вы прокомментировали, что animalList
- это List<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
, которое просто возвращает полностью определенное имя типа объекта.