0 / 0 / 5
Регистрация: 23.09.2016
Сообщений: 254

Суть Override для ToString()

10.12.2017, 18:30. Показов 2877. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните суть override здесь, ведь он переопределяет вызов метода в производном классе от базового, но его тут нет, еще непонятно что значит написанное в строках 58 59 например, также почему будет автоматом вызван метод ToString и как это связано с переопределением?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using System;
 
namespace ConsApp_Book
{
    class Program
    {
        static void Main(string[] args)
        {
            Book[] books = 
                {
                    new Book("Похищение манхэттена", "Джон Стиц", "АСТ", 432u, 1993u), 
                    new Book("C# 4.0. Полное руководство", "Герберт Шилдт", "Вильямс", 1056u, 2013u),
                    new Book("Иррациональный мозг. Почему мы думаем одно, а делаем - другое", "Антон Малютин", "Эксмо", 352u, 2011u),
                    new Book("LINQ. Язык интегрированных запросов в C# 2010 для профессионалов", "Адам Фримен, Джозеф Раттц-мл.", "Вильямс", 656u, 2011u),
                    new Book("Принципы, паттерны и методики гибкой разработки на языке C#", "Р. С. Мартин, М. Мартин", "Символ-Плюс", 768u, 2011u),
 
                    new Book("Какая-то книга 1", "Какой-то издатель 1"),
                    new Book("Какая-то книга 2")
                };
 
            Display(books);
 
            Console.ReadKey();
        }
 
        static void Display(Book[] books) //выводить на экран должен этот класс, а никак не Book, иначе быдлокод
        {
            foreach (var book in books)
            {
                WriteColoredLine("----------------------------------------", ConsoleColor.Yellow);
                Console.WriteLine(book); //Автоматом будет вызван метод ToString()
                Console.WriteLine();
            }
        }
 
        static void WriteColoredLine(string text, ConsoleColor color)
        {
            ConsoleColor currentColor = Console.ForegroundColor;
            Console.ForegroundColor = color;
            Console.WriteLine(text);
            Console.ForegroundColor = currentColor;
        }
    }
 
    public class Book
    {
        #region Поля
 
        private string _title; //названия книги
        private string _author; //автор книги
        private string _publisherName; //название издательства
        private uint _pageQuantity; //количество страниц
        private uint _publicationDate; //год выпуска (дата публикации)
        #endregion
 
        #region Конструкторы
 
        public Book(string title)
            : this(title, string.Empty, string.Empty, 1u, 0u)
        {
        }
 
        public Book(string title, string author)
            : this(title, author, string.Empty, 1u, 0u)
        {
        }
 
        public Book(string title, string author, string publisherName, uint pageQuantity, uint publicationDate)
        {
            Title = title;
            Author = author;
            PublisherName = publisherName;
            PageQuantity = pageQuantity;
            PublicationDate = publicationDate;
        }
        #endregion
 
        #region Свойства
 
        public string Title
        {
            get { return _title; }
            set { _title = value; }
        }
 
        public string Author
        {
            get { return _author; }
            set { _author = value; }
        }
 
        public string PublisherName
        {
            get { return _publisherName; }
            set { _publisherName = value; }
        }
 
        public uint PageQuantity
        {
            get { return _pageQuantity; }
            set { _pageQuantity = value; }
        }
 
        public uint PublicationDate
        {
            get { return _publicationDate; }
            set { _publicationDate = value; }
        }
        #endregion
 
        public override string ToString()
        {
            return string.Format("Название: {0}\r\nАвтор: {1}\r\nНазвание издательства: {2}\r\nКоличество страниц: {3}\r\nГод выпуска: {4}",
                Title, Author, PublisherName, PageQuantity.ToString(), PublicationDate.ToString());
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2017, 18:30
Ответы с готовыми решениями:

Нет доступа к скрытым полям для метода override ToString() (инкапсуляция)
Всем доброго времени суток В универе задали такое задание сделать инкапсуляцию скрытых полей для студентов, все работает кроме доступа...

Override string ToString()
Подскажите пожалуйста , как в public override string ToString() (в конце программы ) сделать запись , чтобы в ...

Enum ToString Override
Есть к примеру public enum Numbers { One, Thousand }

3
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
10.12.2017, 19:05
Цитата Сообщение от MerrinZ Посмотреть сообщение
он переопределяет вызов метода в производном классе от базового
Именно так. А по умолчанию выводится полное имя класса, то есть если не переопределить этот метод, то на консоль выведется ConsApp_Book.Book. Этот метод переопределяется для более осмысленного вывода.
Цитата Сообщение от MerrinZ Посмотреть сообщение
непонятно что значит написанное в строках 58 59
Это вызов одного конструктора из другого.
Цитата Сообщение от MerrinZ Посмотреть сообщение
также почему будет автоматом вызван метод ToString и как это связано с переопределением?
У метода Console.WriteLine() несколько перегрузок, в данном случае будет вызвана та, где аргумент типа Object. А вот описание, как она работает.
If value is null, only the line terminator is written. Otherwise, the ToString method of value is called to produce its string representation, and the resulting string is written to the standard output stream.
1
0 / 0 / 5
Регистрация: 23.09.2016
Сообщений: 254
10.12.2017, 20:18  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Это вызов одного конструктора из другого.
все еще непонятна конструкция
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
10.12.2017, 20:33
Лучший ответ Сообщение было отмечено MerrinZ как решение

Решение

Цитата Сообщение от MerrinZ Посмотреть сообщение
все еще непонятна конструкция
Вот вам простой пример, для наглядности.
В первом случае вызывается основной конструктор, а во втором-дополнительный, который вызывает основной.
И будет лучше, если вы в отладке пройдете пошагово, чтобы самому увидеть весь процесс. Там ясно будет видно, что при вызове дополнительного конструктора вызов переходит на основной, который и создает объект.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication5 {
    class Program {
        int _i;
        string _s;
        decimal _d;
 
        static void Main(string[] args) {
            Program p1 = new Program(1, "string", 125M);
            Program p2 = new Program(10);
        }
        /// <summary>
        /// Основной конструктор
        /// </summary>
        /// <param name="i"></param>
        /// <param name="s"></param>
        /// <param name="d"></param>
        public Program(int i, string s, decimal d) {
            _i = i;
            _s = s;
            _d = d;
        }
        /// <summary>
        /// Перегруженный конструктор, в котором через ключевое слово 'this' идет вызов основного конструктора
        /// </summary>
        /// <param name="i"></param>
        public Program(int i)
            : this(i, "", 0) {
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2017, 20:33
Помогаю со студенческими работами здесь

Возврат 2 переменных в override в методе ToString
Добрый всем день! Подскажите пожалуйста, как можно вызвать две переменные в override ?? Вот код: public override string...

Override toString с сохранением Custom Numeric Format Strings
Добрый день. Есть обычный класс, в котором я переопределяю метод toString, но хотелось бы сохранить настраиваемый числовой формат. ...

При вычислении выражения ++i.ToString() сначала вычисляется ToString(), а потом ++
При вычислении выражения ++i.ToString() сначала вычисляется ToString(), а потом ++. Соответственно, это не работает, работает...

Разница между string.Concat(x,y) и x.ToString()+y.ToString()
Вроде как одно и то же, но дает разные результаты в операции поиска палиндромов. К примеру, взять число 1010: ...

ToString() для дробного числа
Нужно что бы преобразовалось в строку без учета локальных настроек, всегда дробная часть была через точку, даже если в локали стоит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru