Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники_АСОИ / Лекции / 01 Классы / Объекты и типы.docx
Скачиваний:
20
Добавлен:
29.02.2016
Размер:
97.14 Кб
Скачать

Метод ToString()

Вы уже встречались с методом ToString() в разделе 6.2. Этот метод предоставляет наибо­лее удобный способ быстрого получения строкового представления объекта. Например:

int i = -50;

string str = i.ToString(); // возвращает "-50"

Вот другой пример:

enum Colors {Red, Orange, Yellow};

// далее в коде. . .

Colors favoriteColor = Colors.Orange;

string str = favoriteColor.ToString(); // возвращает "Orange"

Метод Object.ToString() объявлен как виртуальный, и во всех этих примерах ис­пользуется преимущество того факта, что его реализация для встроенных типов С# пере­определена с целью возврата корректного представления этих типов. Не следует думать, что перечисление Colors считается предопределенным типом данных. На самом деле оно реализовано как структура, унаследованная от System.Enum, а в System.Enum предлагает­ся достаточно интеллектуальная реализация ToString(), имеющая дело со всеми типами перечислений, которые вы определяете.

Если вы не переопределяете ToString() в своих классах, то они просто наследуют реа­лизацию этого метода от System.Object, которая просто отображает имя класса. Если же необходимо, чтобы метод ToString() возвращал информацию о значении объекта вашего класса, то должны переопределить его. Чтобы проиллюстрировать это, в следующем при­мере  Money  определен очень простой класс, также названный Money, который пред­ставляет суммы в валюте США. Класс Money служит оболочкой типа decimal, но включает метод ToString(). Обратите внимание, что он должен быть объявлен как override, по­тому что переопределяет метод, предоставленный Object. Переопределение рассматрива­ется более подробно в разделе 6.4. Полный код примера приведен ниже. Обратите внимание, что он также иллюстрирует применение свойств для помещения полей в оболочки.

using System;

namespace Wrox

{

class MainEntryPoint

{

static void Main(string[] args)

{

Money cashl = new Money();

cashl.Amount = 40M;

Console.WriteLine("cashl.ToString() возвращает: " +

cashl.ToString());

Console.ReadLine();

}

}

class Money

{

private decimal amount;

public decimal Amount

{

get

{

return amount;

}

set

{

amount = value;

}

}

public override string ToString()

{

return "$'* + Amount.ToString();

}

}

}

Этот пример просто иллюстрирует синтаксические свойства С#. В С# уже имеется пре­допределенный тип для представления денежных сумм  decimal, поэтому в реальности писать класс, дублирующий эту функциональность, не придется, если только вы не поже­лаете добавить к нему какие-то другие методы. Во многих случаях, для удовлетворения тре­бований форматирования, при отображении в строке денежной суммы, скорее всего, будет использоваться метод String.Format() (он описан в разделе 6.8).

В методе Main() сначала создается экземпляр объекта Money, а затем  BetterMoney. После этого вызывается метод ToString() (который в действительности выполняет пере­определенную версию этого метода. Запуск показанного кода даст следующий результат:

cash1.ToString() возвращает: $40

Соседние файлы в папке 01 Классы