C#: Как должен ToString () быть реализованным? [закрытый]

Я понимаю, что Вы не можете управлять этим, но Вы могли бы вместо этого пойти для отделения "маскирования", которое покрывает все тело z-индексом выше, чем 1. Центральная часть отделения могла содержать загружающееся сообщение, если Вам нравится.

Затем Вы можете установить курсор для ожидания на отделении и не должны волноваться о ссылках, поскольку они находятся под контролем маскирующего отделения. Вот некоторый CSS в качестве примера для "отделения маскирования":

body { height: 100%; }
div#mask { cursor: wait; z-index: 999; height: 100%; width: 100%; }
7
задан Community 23 May 2017 в 10:32
поделиться

5 ответов

Похоже, у вас большие ожидания из крошечного маленького метода :) Насколько я знаю, не рекомендуется использовать общий метод в таком большом количестве различных контекстов, особенно когда его поведение может отличаться от класса к классу.

Вот мои предложения:

1 . Не позволяйте библиотекам графического интерфейса использовать ToString () ваших объектов. Вместо этого используйте более значимые свойства (почти все элементы управления можно настроить для отображения других свойств, кроме ToString) например, используйте DisplayMember. 2. При получении некоторой информации об объекте (для ведения журнала или другого использования) позвольте кому-нибудь решить (другой объект или сам объект), что должно быть предоставлено и как оно должно отображаться. (Шаблон стратегии может пригодиться)

5
ответ дан 7 December 2019 в 03:18
поделиться

Это зависит от использования вашего класса с отступом. Многие классы не имеют естественного строкового представления (например, объект формы). Затем я бы реализовал ToString как информативный метод (текст формы, размер и т. Д.), Полезный при отладке. Если класс предназначен для предоставления информации пользователю, я бы реализовал ToString как представление значения по умолчанию. Например, если у вас есть объект Vector, ToString может возвращать вектор в виде координат X и Y. Здесь я бы также добавил альтернативные методы, если есть другие способы описания класса. Итак, для вектора я мог бы добавить метод, который возвращает описание в виде угла и длины.

Для целей отладки вы также можете добавить атрибут DebuggerDisplay в свой класс. Это говорит о том, как отображать класс в отладчике, но не влияет на строковое представление.

Вы также можете захотеть сделать значение, возвращаемое ToString, анализируемым, чтобы вы могли создать объект из строкового представления. То же, что и с методом Int32.Parse.

1
ответ дан 7 December 2019 в 03:18
поделиться

Вот хорошая статья, в которой объясняется Переопределение System.Object.ToString () и реализация IFormattable

2
ответ дан 7 December 2019 в 03:18
поделиться

Лично я не так часто реализую ToString. Во многих случаях это не имело бы большого смысла, поскольку основная роль типа может заключаться в определении поведения, а не данных. В других случаях это просто не имеет значения, потому что оно никогда не понадобится клиентам.

В любом случае, вот несколько случаев, когда это имеет смысл (не исчерпывающий список):

  • Если результат ToString можно представить, анализируется обратно в экземпляр типа без потери данных.
  • Когда тип имеет простое (то есть не сложное) значение.
  • Когда основной целью типа является форматирование данных в текст.

Я не делаю этого. Я не согласен с тем, что между перечисленными вами сценариями использования существует конфликт. Когда отображение является основной целью, ToString должен предоставлять удобный текст, но для ведения журнала (или, скорее, как вы это описываете,

0
ответ дан 7 December 2019 в 03:18
поделиться

Еще одна проблема, которую следует учитывать, - это тесная интеграция между ToString и отладчиком Visual Studio. В окне Watch отображается результат ToString как значение выражения, поэтому, если ваш метод выполняет какую-либо отложенную загрузку, имеет какие-либо побочные эффекты или занимает много времени, вы можете увидеть странное поведение или может показаться, что отладчик зависает. . Конечно, эти качества не являются признаком хорошо разработанного метода ToString, но они случаются (например, наивная реализация «получить перевод из базы данных»).

Следовательно, я считаю метод ToString по умолчанию (без параметров) ловушка отладки Visual Studio - подразумевается, что ее обычно не следует перегружать для использования программой вне контекста отладки.

1
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: