Начал писать ис и наткнулся на вот такой код сущности бд и не могу понять зачем здесь нужен override?
class Sotr
{
public int sotrID { get; set; }
public string FIO { get; set; }
public ICollection<FruitStorage> fruit_Storages { get; set; }
public override string ToString()
{
return FIO;
}
}
Ответы (2 шт):
ToString() всегда надо оверрайдить, чтобы вызов данного метода заходил в конечный объект, пример:
class A
{
public override string ToString() => "A";
}
class B : A
{
public override string ToString() => "B";
}
class C : A
{
public string ToString() => "C"; //<--
}
A b = new B();
A c = new C(); //<--
WriteLine(b); //Output B
WriteLine(c); //Output A //<--
Разница в override и дело не в сущности БД
Когда нужно вернуть значение одного свойства как в данном примере, то не стоит использовать overrtide ToString(), я же приведу пример где возвращаемое значение будет чуть сложнее чем одно свойство. У каждого объекта .net есть метод ToString(), который возвращает строковое значение, если мы напишем следующий код:
Sotr
public class Sotr
{
public int sotrID { get; set; }
public string FIO { get; set; }
public ICollection<FruitStorage> fruit_Storages { get; set; }
public override string ToString()
{
var fruits = string.Join(", ", fruit_Storages); //читать ниже
return $"{FIO}\n" +
$"Фрукты: {fruits}";
}
}
FruitStorage
public class FruitStorage
{
public int Id { get; set; }
public string Title { get; set; }
public override string ToString()
{
return Title;
}
}
Метод ToString() тут переопределен ключевым словом override и возвращено нам будет то что описано в теле метода, в данном случае это название фрукта.
Console.WriteLine() - Смотрим конечный результат
sotr = new Sotr()
{
sotrID = 1,
FIO = "Фамилия Имя Отчество",
fruit_Storages = new List<FruitStorage>()
{
new FruitStorage(){Id = 1, Title = "Яблоко"},
new FruitStorage(){Id = 2, Title = "Груша"}
}
};
Console.WriteLine(sotr.ToString());
Результат:
Фамилия Имя Отчество
Фрукты: Яблоко, Груша
Разбор
Разберем метод ToString() в объекте Sotr
Метод string.Join() - Сцепляет элементы указанного массива или элементы коллекции, помещая между ними заданный разделитель.
var fruits = string.Join(", ", fruit_Storages);
В результате мы получили строковое значение следующего вида: Яблоко, Груша.
return $"{FIO}\n" +
$"Фрукты: {fruits}";
И возвращаем {FIO} - ФИО \n - перенос строки и вставляем в конце Фрукты: {fruits}