- •3. Лекция: Выражения и операции
- •Выражения
- •Приоритет и порядок выполнения операций
- •Перегрузка операций и методов
- •Преобразования типов
- •Организация программного проекта ConsoleExpressions
- •Операции высшего приоритета
- •Выражения в скобках
- •Операция индексации a[I, j]
- •Операция new
- •Операции sizeof и typeof
- •Операции "увеличить" и "уменьшить" (increment, decrement)
- •Унарные операции приоритета 1
- •Операция кастинга - приведения к типу
- •Проверяемые и непроверяемые блоки и выражения
- •Арифметические операции
- •Вычисление выражений
- •Память и время - два основных ресурса
- •Именованные константы
- •Операции отношения
- •Операции проверки типов
- •Операции сдвига
- •Логические операции
- •Логические операции над булевскими операндами
- •Логические операции над булевскими операндами и целыми числами. Работа со шкалами
- •Условное выражение
- •Операция присваивания
- •Операция ?? - новая операция c# 2.0
- •Лямбда-оператор - новая операция в c# 3.0
- •Преобразования внутри арифметического типа
- •Выражения над строками. Преобразования строк
- •Преобразования строкового типа в другие типы
- •Метод Parse
- •Преобразование в строковый тип
- •Класс Convert и его методы
- •Класс Console и его методы
- •Методы Read и ReadLine
- •Вывод данных на консоль. Методы Write и WriteLine
- •Вычисление выражений. Оценка времени вычислений
- •Геометрические фигуры
- •Преобразования типов
- •Проекты
-
Преобразования строкового типа в другие типы
Хотя неявных преобразований строкового типа в другие типы нет, необходимость в преобразованиях существует. Когда пользователь вводит данные различных типов, он задает эти данные как строки текста, поскольку текстовое представление наиболее естественно для человека. Поэтому при вводе практически всегда возникает задача преобразования данных, заданных текстом, в "настоящий" тип данных.
Классы библиотеки FCL предоставляют два способа явного выполнения таких преобразований:
-
метод Parse;
-
методы класса Convert.
-
Метод 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 способен приводить к исключительной ситуации, корректно построенный ввод пользовательских данных предполагает помещение подобного вызова в охраняемый блок и построение соответствующего обработчика исключительной ситуации. Для краткости примера эта часть работы опущена.
-
Преобразование в строковый тип
Преобразования в строковый тип всегда определены, поскольку все типы являются потомками базового класса 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 он вызывается автоматически.