Предоставление ToString () для моего пользовательского объекта - PullRequest
2 голосов
/ 16 декабря 2010

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

string log = "Current state of object:" + "Property1" + myObj.Property1 + ...
  1. . Я просто подумал, что если переопределить ToString, и обеспечить ведение журнала всего, что мне нужно.Это считается практикой Гуг?
  2. Как предоставить строку управления форматером?Скажем, я хочу, чтобы моя ToString работала в двух режимах: один - полный вывод всех свойств, а в другой облегченной версии - выводятся только соответствующие свойства

Что-то вроде MyObj.ToString ("full") и MyObj.ToString( "основной")

Ответы [ 4 ]

4 голосов
/ 16 декабря 2010

Переопределение ToString действительно хорошая практика, если вы предоставляете хорошую информацию.

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

Я бы реализовал версию lightweight в качестве переопределения и создал бы функцию VerboseToString для полного набора свойств.

Если у вас много таких объектов, вы можете создать интерфейс IVerboseString с помощью метода VerboseToString и внедрить его в свои объекты.Таким образом, вы можете просто использовать ссылку интерфейса в журнале.

1 голос
/ 16 декабря 2010

Я не могу вспомнить какую-либо конкретную проблему, связанную с ней, и сам я часто ценю это за то, что выкладывал информацию в модульные тесты или трассировку и т. Д., Но я бы не согласился с вашей реализацией для подробного и краткого вывода - не не использовать строки вуду или любой другой произвольный ввод - я бы предпочел это здесь, если вы либо взяли входной аргумент bool verbose, либо явно создали метод ToStringVerbose(). Это также хорошая практика для вашего переопределенного метода использовать base.ToString() как часть его реализации.

1 голос
/ 16 декабря 2010

Почему вы переопределяете ToString, но не создаете метод, который принимает Enum в качестве параметра и выполняет то, что вы хотите внутри?

1 голос
/ 16 декабря 2010
  1. Это отличная практика
  2. Конечно, вы можете параметризовать метод ToString, но это больше не будет означать неявное преобразование из объекта в строку, поэтому вы не можете писать, скажем, string x = myObject; вам придется явно вызывать ToString.
...