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

Переопределение метода ToString у списка

03.05.2013, 09:58. Показов 14928. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Народ помогите плс... у _e есть методы, свойства и т.д. Возможно ли переопределить\добавить свой метод скажем ToString у _e сохраняя все стандартные методы и т.п.?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public class LE
    {
        public LE()
        {
            a = null;
            b = null;
        }
 
        public LE(string ty, string me)
        {
            a = ty;
            b = me;
        }
 
        public string a { get; set; }
        public string b { get; set; }
    }
 
List<LE> _e = new List<LE>();
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2013, 09:58
Ответы с готовыми решениями:

Переопределение метода ToString()
В общем есть Класс Text, у него я, пытаюсь, переопределить метод ToString(). Подскажите как можно переопределить метод так, чтобы туда...

Переопределение ToString для List
Добрый день. Возникла проблема с переопределением ToString для List. Есть следующий класс: class Grandma { ...

Переопределение ToString(). Метод по умолчанию не возвращает полное имя экземпляра класса
Добрый день. существует следующий код. Почему метод тустринг по умолчанию не возвращает полное имя экземпляра класса? Заранее спасибо за...

17
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
03.05.2013, 10:10
Как пример:
C#
1
2
3
4
public override string ToString()
        {
            return a + ", " + b;
        }
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 10
03.05.2013, 12:35  [ТС]
Возможно я не правильно выразился. Нужно переопределитель метод не у класса LE, а у списка List<LE>.
У _e есть такие методы: Add, AddRange, Last, ToString... Вот сюда и необходимо поместить новый/переопредилить старый метод.
Пробовал:

C#
1
2
3
4
5
6
7
public class List<LE>
  {
  public override string ToString()
      {
      return a + ", " + b;
      }
  }
Не получается метод ToString есть, и он вроде переопределен, а вот остальных методов нету (Add, AddRange и т.п.).
0
СуперМодулятор
 Аватар для Bringoff
134 / 134 / 48
Регистрация: 03.11.2012
Сообщений: 974
03.05.2013, 12:39
Цитата Сообщение от White Angel Посмотреть сообщение
Не получается
Ваш класс должен быть потомком класса List...
C#
1
public class List<LE> : List
Вроде так.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
03.05.2013, 12:55
Цитата Сообщение от Izobara Посмотреть сообщение
public class List<LE> : List
C#
1
public class LeList : List<LE>
1
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 10
03.05.2013, 13:57  [ТС]
Цитата Сообщение от Izobara Посмотреть сообщение
Ваш класс должен быть потомком класса List...
C#
1
public class List<LE> : List
Вроде так.
Не получилось.

Цитата Сообщение от Jupiter Посмотреть сообщение
C#
1
public class LeList : List<LE>
Заработало, но мне тогда приходится объявлять экземпляр класса LeList.
А возможно переопределить в основном классе, без производного, по аналогии как указал Izobara?
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
03.05.2013, 14:20
Напишите расширение для своего списка:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public static class LeExtension
    {
        public static string LeToString(this List<LE> list)
        {
            string result = "";
            foreach (LE item in list)
            {
                result += item.a + "," + item.b + ";";
            }
            return result;
        }
    }
И вызывайте его:
C#
1
string str = list.LeToString();
0
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
03.05.2013, 14:34
Пишем метод расширения для всех листов:
C#
1
2
3
4
5
6
7
8
9
10
    static class Expansion
    {
        public static string MyToString<T>(this List<T> list)
        {
            string result = string.Empty;
            foreach (T t in list)
                result += t.ToString();
            return result;
        }
    }
Добавлено через 1 минуту
Kruds предложил более локальный способ для решение вашей задачи. Используйте его решение.
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 10
04.05.2013, 04:55  [ТС]
Всем большое спасибо за ответы. Пошел читать про расширение.
0
212 / 214 / 44
Регистрация: 20.12.2011
Сообщений: 635
04.05.2013, 05:01
Цитата Сообщение от White Angel Посмотреть сообщение
Выбрал вариант Jupiter.
ИМХО, выбор не очень. Лучше смотрите в сторону extansion methods.
Kruds и Дмитрий3241 предложили более стоящие варианты, если, конечно, Ваша цель не тупо сдать лабу.
0
212 / 214 / 44
Регистрация: 20.12.2011
Сообщений: 635
04.05.2013, 05:06
Цитата Сообщение от White Angel Посмотреть сообщение
Выбрал вариант Jupiter.
ИМХО, выбор не очень. Лучше смотрите в сторону extansion methods.
Kruds и Дмитрий3241 предложили более стоящие варианты, если, конечно, Ваша цель не тупо сдать лабу.

Добавлено через 4 минуты
сорри за мультипостинг(форум не грузился и ошибками швырялся) + ТС пост отредактировал в момент моего ответа -_-
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 10
04.05.2013, 06:46  [ТС]
Как я понял способы Kruds и Дмитрий3241 применимы для создания расширений, но не для переопределении. Т.е. для добавления новых методов - это решает частично мой вопрос.
Остался вопрос переопределения метода, вот так не поучилось:
C#
1
2
3
4
        public override static string ToString(this List<LogEntry> str)
        {
            return "";
        }
Существуют ли еще варианты, или вариант Jupiter единственный?

Добавлено через 5 минут
Цитата Сообщение от Fler Посмотреть сообщение
ИМХО, выбор не очень. Лучше смотрите в сторону extansion methods.
Kruds и Дмитрий3241 предложили более стоящие варианты, если, конечно, Ваша цель не тупо сдать лабу.
Я поспешил с написанием поста (пост отредактирован ), почитал про расширения и сделал вывод, что они частично решают мой вопрос. Способ переопределения пока не нашел.
0
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
04.05.2013, 12:16
C#
1
2
3
4
public new static string ToString(this List<LogEntry> str)
{
     return "";
}
Добавлено через 24 секунды
Создаст +1 перегрузку базового метода ToString();
1
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 10
05.05.2013, 04:03  [ТС]
Класс Extensions находится в п.и. NS:

C#
1
2
3
4
5
6
7
    public static class Extensions
    {
        public static new string ToString(this List<LE> str)
        {
            return "1234567";
        }
    }
Вызываю:

C#
1
using NS;
C#
1
2
3
4
5
        private void Form1_Load(object sender, EventArgs e)
        {
            List<LE> a = new List<LE>();
            MessageBox.Show(a.ToString());
        }
Программа выдает ошибку:

Ошибкаm 4 "System.Collections.Generic.List<NS. LE>" не содержит определение для "ToString". Не удалось найти метод расширения "ToString", принимающий первый аргумент типа "System.Collections.Generic.List<NS. LE>" (пропущена директива using или ссылка на сборку?)

И вместо "1234567" выдает название объектов/методов.
Почему не могу разобраться.

Добавлено через 11 часов 29 минут
Были остальные ошибки, все поправил теперь вот выдает:

"NS.Extensions.ToString(System.Collectio ns.Generic.List<NS.LE>)" не скрывает наследуемого члена. Ключевое слово new не требуется.

И вместо "1234567" все равно выдает название объектов/методов (System.Collections.Generic.List...).
Т.е. как я понимаю подгружается базовый метод ToString.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.05.2013, 09:09
Дмитрий3241, он не может создать перегрузку, потому что сигнатура получается совпадает. Если мы пишем list.ToString() - то это имеется ввиду object.ToString() или ToString(list)? Компьютер же не телепат.

Когда пишете расширение, то просто вместо
MethodName(SomeClass) вы с помощью слова this показываете, что можно написать SomeClass.MethodName, но на самом деле вы тупо вызываете статический метод, просто неявно, "как будто" это метод класса, но это не так.
1
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 10
06.05.2013, 15:18  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Дмитрий3241, он не может создать перегрузку, потому что сигнатура получается совпадает. Если мы пишем list.ToString() - то это имеется ввиду object.ToString() или ToString(list)? Компьютер же не телепат.

Когда пишете расширение, то просто вместо
MethodName(SomeClass) вы с помощью слова this показываете, что можно написать SomeClass.MethodName, но на самом деле вы тупо вызываете статический метод, просто неявно, "как будто" это метод класса, но это не так.
Т.е. как я понял при помощи расширения нельзя сделать переопределение у существующего метода, правильно?
И второй вопрос, точнее первый . Способ который предложил Jupiter единственный?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.05.2013, 17:20
White Angel, нельзя. Потому что это просто синтаксический сахар вызова внешних статических методов.

Переопределить можно только наследованием и никак иначе. Другой "возможный вариант" - это создать свой класс, наследованный от object, после этого ввести все те же методы, как в вашем, в который хотите добавить, и делегируйте выполнение методов этому полю, а нужный метод можете определить как хотите - получится переопределение.
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 10
07.05.2013, 03:10  [ТС]
Большое спасибо всем участвующим в обсуждении. Получил исчерпывающие ответы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2013, 03:10
Помогаю со студенческими работами здесь

Как сделать перегрузку метода ToString()
Помогите сделать перегрузку метода ToString(), еще чтобы были готовые 3 пациента при запуске, и после занесения данных они не записываются...

Наследование метода toString() в производном классе
В главном классе определил метод toString(): /// &lt;summary&gt; /// вывод на экран значений /// &lt;/summary&gt; ...

Для чего делают перегрузку метода ToString()
Для чего делают перегрузку метода ToString() или других методов, и как она делаеться ?

Переопределение метода toString()
Никак не могу разобраться с переопределение метода toString(), помогите, пожалуйста. Вот небольшая программка: import java.util.Arrays; ...

Переопределение метода ToString для Double
Итак! Имеется класс X в котором есть свойство G типа Double. X.G = 0 MsgBox(X.G) 'Возвращает 0 ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru