W programowaniu często zdarza się, że musimy przekształcić jeden typ danych w drugi. Wyróżniamy twa rodzaje przekształceń jawne i niejawne.

Przekształcenie niejawne.

Ten rodzaj konwersji typu występuje gdy konwertujemy typ o mniejszym zakresie do typu o większym. Nie występuje wtedy ryzyko utraty danych.
Przykład:
1. Zadeklaruję zmienną o typie int, która będzie nazywać się liczba. Zmienna ta przechowuje liczby całkowite. Nadam jej wartość wynoszącą 10.

using System;
    class Program {
        static void Main() {
            int liczba = 10;
        }
    }

2. Przekształcę typ zmiennej z int na float. Typ float przechowuje liczby zmiennoprzecinkowe. Zakres typu float jest większy niż typu int nie utracimy żadnych danych podczas konwersji. Dodam więc nową zmienną o typie float, nazwę ją liczba2 i przypiszę jej wartość zmiennej liczba. Następnie wyświetlę wynik na ekranie.

using System;
    class Program {
        static void Main() {
            int liczba = 10;
            float liczba2 = liczba;
            Console.WriteLine("Wartość zmiennej liczba2 wynosi: "+liczba2);
            Console.ReadLine();
        }
    }

Efekt działania aplikacji:

 Efekt działania aplikacji

Rys. Wyświetlenie na ekranie wartości zmiennej o nazwie liczba2

Przekształcenie jawne.

Ten rodzaj konwersji występuje gdy chcemy przekształcić typ o większym zakresie na typ o mniejszym. Występuje wtedy możliwość utraty danych.
Przykład:
1. Zadeklaruję zmienną typu float o nazwie liczba. Zmienna ta przechowuje liczby zmiennoprzecinkowe. Nadam jej wartość wynoszącą 11.8

using System;
class Program {
    static void Main() {
        float liczba = 11.8f;
    }
}

Przy inicjalizowaniu zmiennej liczba za wartością dopisałem literę f. Jest to wymagane przy nadawaniu wartości dla zmiennej o typie float. Ponieważ standardowym typem zmiennoprzecinkowym dla platformy .Net jest typ double. Podczas próby przypisania wartości bez dopisania litery f wykonywana jest próba przekształcenia typu danych z typu o większym zakresie (double) do typu o mniejszym zakresie (float).
Zobaczmy przykład:

using System;
class Program {
    static void Main() {
        float liczba = 11.8;
    }
}

Kompilator zgłasza błąd:

Błąd zgłoszony przez kompilator

Rys. Błąd zgłoszony przez kompilator.

Jak widzimy poprzez dopisanie litery f występuje konwersja jawna.

2. Spróbuję przekształcić typ float na int w sposób niejawny. Stworzę w tym celu zmienną typu int o nazwie liczba2. Przypiszę jej wartość zmiennej o nazwie liczba. Następnie wyświetlę rezultat na ekranie.

using System;
class Program {
    static void Main() {
        float liczba = 11.8f;
        int liczba2 = liczba;
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = "+ liczba2);
        Console.ReadLine();
    }
}

Kompilator zgłosi nam błąd:

Błąd zgłoszony przez kompilator

Rys. Błąd zgłoszony przez kompilator.

Jak widzimy nie możemy niejawnie rzutować typ o większym zasięgu do typu o mniejszym.
3. Poprawmy błąd stosując jawne przekształcenie typów, za pomocą operatora konwersji typów:

using System;
class Program {
    static void Main() {
        float liczba = 11.8f;
        int liczba2 = (int)liczba; // zastosowanie operatora konwersji typów
        Console.WriteLine("Wartość dla zmiennej liczba2 wynosi = "+ liczba2);
        Console.ReadLine();
    }
}

Oto rezultat działania naszej aplikacji:

rezultat działania naszej aplikacji
Rys. Wyświetlenie na ekranie wartości zmiennej o nazwie liczba2

Po wyświetleniu wyniku okazuje się, że utracona została wartość liczby po przecinku. Wymaganie konwersji jawnej jest w pewnym sensie ostrzeżeniem dla programisty o możliwości utraty danych. W przypadku gdyby kompilator nie wymagał jawnego przekształcenia, mogłyby powstać błędy logiczne podczas tworzenia algorytmu, w którym wymagana byłaby dokładność obliczeń. Wynik zwracany przez taki algorytm byłby niezadowalający. Ciężko byłoby odnaleźć w kodzie taki błąd logiczny. A tak kompilator wymaga aby programista świadomie używał konwersji jawnej i godził się na utratę danych.

Aby rozszerzyć swoją wiedzę na temat konwersji typów zapraszam do zapoznania się z cyklem artykułów poświęcony temu zagadnieniu: LINK