Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 3. Ядро мови С#.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
229 Кб
Скачать
☆

3.5. Перетворення з рядкового типу в арифметичний

Коли користувач вводить дані різних типів (з консолі чи форми), то він задає ці дані як рядки тексту. Дані строкового типу потребують явного перетворення до арифметичного типу.

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

  • Метод Parse;

  • Методи класу Convert.

3.5.1. Метод Parse

Всі скалярні типи (арифметичний, логічний, символьний) мають статичний метод Parse, аргументом якого є рядок, а результатом об'єкт відповідного типу.

Розглянемо приклад перетворення даних з використанням методу Parse.

Приклад 3.2.

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);

}

3.5.2. Перетворення з арифметичного типу у тип string

Перетворення в тип string завжди визначені, оскільки всі типи є нащадками базового класу object і успадковують метод ToString().

Для всіх підтипів арифметичного типу метод ToString() повертає рядок, який задає відповідне значення арифметичного типа. Метод ToString завжди потрібно викликати явно. Його можна опускати при виконанні операції конкатенації. Якщо один з операндів операції «+» є рядком, то операція сприймається як конкатенація рядків і другий операнд неявно перетвориться до цього типу. Ось відповідний приклад:

Приклад 3.3.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Lab2_3

{

class Program

{

/// <summary>

/// Демонстрація перетворення в рядок

/// даних різного типу

/// </summary>

static void Main(string[] args)

{

string name;

int age;

double salary;

name = "Василь Іванов";

age = 20;

salary = 2700;

string s = "Ім'я: " + name +

". Вік: " + age.ToString() +

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

Console.WriteLine(s);

Console.ReadKey();

}

}

}

Тут для змінної age метод був викликаний явно, а для змінної salary він викликається автоматично.

3.5.3. Клас Convert і його методи

Для перетворень усередині арифметичного типа можна використовувати кастинг - приведення типа. Для перетворень строкового типа в скалярний тип можна використовувати метод Parse, а у зворотний бік – метод ToString.

У всіх ситуаціях, коли потрібно виконати перетворення з одного базового вбудованого типа в інший базовий тип, можна використовувати методи класу Convert бібліотеки FCL, вбудованого в простір імен System, - універсального класу, статичні методи якого спеціально спроектовані для виконання перетворень.

Серед інших методів класу Convert є загальний статичний метод ChangeType, що дозволяє перетворення об'єкту до деякого заданого типа. Існує також можливість перетворення у системний тип DateTime, який хоча і не є базисним типом мови C#, але допустимий в програмах, як і будь-який інший системний тип.

Методи класу Convert підтримують загальний спосіб виконання перетворень між типами. Клас Convert містить 15 статичних методів вигляду To<Type> (ToBoolean(),.ToUInt64()), де Type може набувати значень від Boolean до UInt64 для всіх вбудованих типів. Єдиним виключенням є тип object, – методу ToObject немає із зрозумілих причин, оскільки для всіх типів існує неявне перетворення до типа object.

Приклад 3.4.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Lab1_2

{

class Program

{

/// <summary>

/// Тестування методів класу Convert

/// </summary>

static void Main(string[] args)

{

string s;

byte b;

int n;

double x;

bool flag;

char sym;

DateTime dt;

sym = '7';

s = Convert.ToString(sym);

x = Convert.ToDouble(s);

n = Convert.ToInt32(x);

b = Convert.ToByte(n);

flag = Convert.ToBoolean(b);

x = Convert.ToDouble(flag);

s = Convert.ToString(flag);

s = "300";

n = Convert.ToInt32(s);

s = "14.09";

s = "14.09.2008";

dt = Convert.ToDateTime(s);

}

}

}

Цей приклад демонструє різні перетворення між типами. Всі ці перетворення виконуються явно з використанням методів класу Convert. Спочатку дані символьного типа перетворюються в рядок. Потім ці дані перетворюються в дійсний тип, потім проводяться перетворення усередині арифметичного типа з пониженням типа від double до byte. Перетворенням, що завершує приклад, є перетворення даних строкового типа до типа DateTime.