Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C# Лекция_3 Выражения и операции.docx
Скачиваний:
28
Добавлен:
18.12.2018
Размер:
667.21 Кб
Скачать
    1. Преобразования строкового типа в другие типы

Хотя неявных преобразований строкового типа в другие типы нет, необходимость в преобразованиях существует. Когда пользователь вводит данные различных типов, он задает эти данные как строки текста, поскольку текстовое представление наиболее естественно для человека. Поэтому при вводе практически всегда возникает задача преобразования данных, заданных текстом, в "настоящий" тип данных.

Классы библиотеки FCL предоставляют два способа явного выполнения таких преобразований:

  • метод Parse;

  • методы класса Convert.

      1. Метод Parse

Все скалярные типы (арифметический, логический, символьный) имеют статический метод Parse, аргументом которого является строка, а возвращаемым результатом - объект соответствующего типа. Метод явно выполняет преобразование текстового представления в тот тип данных, который был целью вызова статического метода. Понятно, что строка, представляющая аргумент вызова, должна соответствовать представлению данных соответствующего типа. Если это требование не выполняется, то в ходе выполнения метода возникнет исключительная ситуация. Приведу пример преобразования данных, выполняемых с использованием метода Parse.

static void InputVars()

{

string strInput;

Console.WriteLine(INPUT_BYTE);

strInput = Console.ReadLine();

byte b1;

b1 = byte.Parse(strInput);

Console.WriteLine(INPUT_INT);

strInput = Console.ReadLine();

int n;

n = int.Parse(strInput);

Console.WriteLine(INPUT_FLOAT);

strInput = Console.ReadLine();

float x;

x = float.Parse(strInput);

Console.WriteLine(INPUT_CHAR);

strInput = Console.ReadLine();

char ch;

ch = char.Parse(strInput);

}

Здесь приглашение к вводу задается соответствующей строковой константой. Поскольку вызов метода Parse способен приводить к исключительной ситуации, корректно построенный ввод пользовательских данных предполагает помещение подобного вызова в охраняемый блок и построение соответствующего обработчика исключительной ситуации. Для краткости примера эта часть работы опущена.

    1. Преобразование в строковый тип

Преобразования в строковый тип всегда определены, поскольку все типы являются потомками базового класса object и наследуют метод ToString(). Конечно, родительская реализация этого метода чаще всего не устраивает наследников. Поэтому при определении нового класса в нем должным образом переопределяется метод ToString. Для встроенных типов определена подходящая реализация этого метода. В частности, для всех подтипов арифметического типа метод ToString() возвращает строку, задающую соответствующее значение арифметического типа. Заметьте, метод ToString следует вызывать явно. В ряде ситуаций вызов метода может быть опущен, и он будет вызываться автоматически. Его, например, можно опускать при сложении числа и строки. Если один из операндов операции "+" является строкой, то операция воспринимается как конкатенация строк и второй операнд неявно преобразуется к этому типу. Вот соответствующий пример:

/// <summary>

/// Демонстрация преобразования в строку

/// данных различного типа.

/// </summary>

public void ToStringTest()

{

string name;

uint age;

double salary;

name = "Владимир Петров";

age = 27;

salary = 27000;

string s = "Имя: " + name +

". Возраст: " + age.ToString() +

". Зарплата: " + salary;

Console.WriteLine(s);

}

Здесь для переменной age метод был вызван явно, а для переменной salary он вызывается автоматически.