Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 5
Регистрация: 23.09.2016
Сообщений: 254

Суть Override для ToString()

10.12.2017, 18:30. Показов 2849. Ответов 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 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru