C# - typy danych
W języku C# typy można podzielić w następujący sposób:
- typy wartościowe (value types)
- typy referencyjne (reference types)
- typy wskaźnikowe (poiner types)
Typy wartościowe
Są to typy, które w momencie utworzenia zmiennej alokują pamięć, gdzie przechowują przypisana wartość.
Typy proste można podzielić na 4 grupy: logiczne, numeryczne, znakowe.
Typ logiczny:
| Typ | Domyślnie | Zakres/Opis |
bool | False |
Typ logiczny przechowujący wartość prawda lub fałsz.
|
Typ znakowy:
| Typ | Domyślnie | Zakres/Opis |
char | '\0' |
od 16-bitowy typ znakowy (przechowujący znaki z tablicy Unicode).
|
Typ numeryczny zmienno-przecinkowy:
| Typ | Domyślnie | Zakres/Opis |
float | 0.0F |
-3.4 × 10^38 do +3.4 × 10^38 32-bitowa wartość o pojedynczej prezycji (precyzja 7 cyfr; używany do obliczeń zmiennoprzecinkowych)
|
double | 0.0D |
±5.0 × 10^324 do ±1.7 × 10^308 64-bitowa wartość o podwójnej precyzji (precyzja 15-16 cyfr; używany do obliczeń zmiennoprzecinkowych)
|
decimal | 0.0M |
(-7.9 × 10^28 do 7.9 × 10^28) / (10^(0 do 28)) 128-bitowa wartość dziesiętna (przecyzja 28-29 cyfr znaczących; używany do obliczeń finansowych, gdzie ważna jest precyzja obliczeń)
|
Typ numeryczny całkowity (ze znakiem -/+):
| Typ | Domyślnie | Zakres/Opis |
long | 0L |
od 64-bitowa liczba całkowita (dodanie i ujemne liczby)
|
int | 0 |
od 32-bitowa liczba całkowita (dodanie i ujemne liczby)
|
short | 0 |
od 16-bitowa liczba całkowita (dodanie i ujemne liczby)
|
sbyte | 0 |
od 8-bitowa liczba całkowita (dodanie i ujemne liczby)
|
Typ numeryczny całkowity (bez znaku):
| Typ | Domyślnie | Zakres/Opis |
ulong | 0L |
od 64-bitowa liczba całkowita (tylko dodanie liczby)
|
uint | 0 |
od 32-bitowa liczba całkowita (tylko dodanie liczby)
|
ushort | 0 |
od 16-bitowa liczba całkowita (tylko dodanie liczby)
|
byte | 0 |
od 8-bitowa liczba całkowita (tylko dodanie liczby)
|
Typy referencyjne
Są to typy, które nie przechowują rzeczywistych wartości w zmiennej, a przechowują referencje do obiektów.
Typy referencyjne można podzielić na 3 grupy: obiektowe, dynamiczne, łańcuchowe.
Typ obiektowy:
W C# wszystkie klasy dziedziczą niejawnie po klasie System.Object. Przypisanie do zmiennej obiektu powstałego z typu zdefiniowanego z użyciem class, spowoduje przypisanie referencji wskazującej na ten obiekt.
using System;
public class Program
{
public static void Main()
{
Student value = new Student();
}
}
public class Student
{
// Ciało klasy tutaj ...
}
Typ dynamiczny:
Sprawdzenie typów dla typów dynamicznych odbywa się w trakcie wykonywania programu.
Student value = new Student();
dynamic varible = value;
Typ łańcuchowy (typ String / string):
Pozwala przypisać dowolną wartość tekstową do naszej zmiennej. Możemy posługiwać się typem String lub jego aliasem string.
string variable = "Some text here ..."; // or String variable = ...
Typy wskaźnikowe
Są to typy, które przechowują w pamięci adres danego typu - czyli zmienna typu wskaźnikowego wskazuje na jakieś miejsce w pamięci. Aby móc używać takich typów, musimy włączyć ich obsługę w konfiguracji projektu oraz umieszczać taki kod w blokach unsafe.
int value = 10;
unsafe
{
int* pointer = &value; // pobranie adresu zmiennej value i przypisanie go do wskaźnika
// jakieś dalsze operacje na wskaźnikach tutaj ...
}