Konwersja typów to konwertowanie jednego typu danych na inny typ danych. Pojęcie to w języku angielskim to Type Casting.
W języku C# istnieją dwa rodzaje konwersji:
konwersja niejawna (Implicit type conversion) – ten rodzaj konwersji jest dokonywany w bezpieczny sposób. Oznacza to, że dokonujemy konwersji, np. mniejszego na większy typ danych czy konwersji klasy pochodnej na klasę bazową;
konwersja jawna (Explicit type conversion) – konwersje takie wykonywane są bezpośrednio przez użytkowników za pomocą wcześniej zdefiniowanych metod. Jawne konwersje wymagają zastosowania operatora rzutowania.
Poniżej przykład niejawnej konwersji typów:
using System;
namespace KonwersjaTypow
{
class NieJawnaKonwersja
{
static void Main(string[] args)
{
int wartosc1 = 0;
byte wartosc2 = 15;
// Wymuszona konwersja, dokonywana automatycznie przez kompilator
// Przypisanie wartości byte do wartości int
wartosc1 = wartosc2;
// Kolejny przykład, dodajemy dwie liczby: całkowitą i zmiennoprzecinkową
// Wynik to wartość zmiennoprzecinkowa
Console.WriteLine(34 + 34.5);
}
}
}
Poniżej przykład jawnej konwersji typów:
using System;
namespace KonwersjaTypow
{
class JawnaKonwersja
{
static void Main(string[] args)
{
double liczba = 3765.47;
int i;
// Konwersja typu doble na int - użycie operatora rzutowania;
i = (int)liczba;
// Rezultat wywołania takiego programu to: 3765
Console.WriteLine(i);
Console.ReadKey();
}
}
}
Metody konwersji typów w C#
Poniższa tabela zawiera listę wbudowanych metod do konwersji typów:
Metoda
Opis
ToBoolean
konwersja typu na typ logiczny - w miarę możliwości
ToByte
konwersja typu na bajt
ToChar
konwersja typu do pojedynczego znaku tablicy Unicode - w miarę możliwości
ToDateTime
konwersja typu (liczba całkowita lub łańcuch znaków) do typu DateTime (data i godzina)
ToDecimal
konwersja liczby zmiennoprzecinkowej lub liczb całkowitej do typu dziesiętnego
ToDouble
konwersja typu do typu double (64-bitowa liczba zmiennoprzecinkowa)
ToInt16
konwersja do 16-bitowej liczby całkowitej
ToInt32
konwersja do 32-bitowej liczby całkowitej
ToInt64
konwersja do 64-bitowej liczby całkowitej
ToSbyte
konwersja do 8-bitowej liczb całkowitej
ToSingle
konwersja do małej liczby zmiennoprzecinkowej
ToString
konwersja typu do łańcucha tekstowego
ToType
konwersja typu do określonego typu
ToUInt16
konwersja do 16-bitowej liczby całkowitej (bez możliwości przechowywania liczb ujemnych)
ToUInt32
konwersja do 32-bitowej liczby całkowitej (bez możliwości przechowywania liczb ujemnych)
ToUInt64
konwersja do 64-bitowej liczby całkowitej (bez możliwości przechowywania liczb ujemnych)
Konwersja różnych typów wartościowych do łańcucha tekstowego (string):
using System;
namespace KonwersjaTypow_WbudowaneMetody
{
class KonwersjaDoString
{
static void Main(string[] args)
{
int i = 32;
float f = 32.005f;
double d = 1234.5678;
bool b = false;
// Wynik to: 32
Console.WriteLine(i.ToString());
// Wynik to: 32.005
Console.WriteLine(f.ToString());
// Wynik to: 1234.5678
Console.WriteLine(d.ToString());
// Wynik to: false
Console.Write(b.ToString());
// Wszystkie powyższe wartości (po konwersji) to wartości tekstowe
Console.ReadKey();
}
}
}