Typy wartościowe w C#

Cel: Napisz aplikację, która z listy wyboru typów zmienny zwróci ich rozmiar

typy wartościowe w języku C#

W języku C# zmienne są podzielone według poniższego rodzaju:

Zanim przystąpimy do rozwiązania podanego celu zapoznamy się z listą dostępnych typów wartościowych i ich zakresem

Typy zmiennych
TypReprezentacjaZakres
booltyp logicznytrue lub false
byte8-bitowa liczba całkowita0 do 255
char16-bitowy znak z tablicy UnicodeU +0000 do U +ffff
decimal128-bitowa wartość dziesiętna z dokładnością 28-29 cyfr znaczących(-7.9⋅1028 do 7.9⋅1028)/100 do 28
double64-bitowa wartość o podwójnej precyzji używana do obliczeń zmiennoprzecinkowych(+/-)5.0⋅10-324 do (+/-)1.7⋅10308
float32-bitowa wartość o pojedynczej prezycji używana do obliczeń zmiennoprzecinkowych-3.4⋅1038 do + 3.4⋅1038
int32-bitowa liczba całkowita-2 147 483 648 do 2 147 483 647
long64-bitowa liczba całkowita-9 223 372 036 854 775 808 do 9 223 372 036 854 775 807
sbyte8-bitowa liczba całkowita-128 do 127
short16-bitowa liczba całkowita-32 768 do 32 767
uint32-bitowa liczba całkowita (bez możliwości przechowywania liczb ujemnych)0 do 4 294 967 295
ulong64-bitowa liczba całkowita (bez możliwości przechowywania liczb ujemnych)0 do 18 446 744 073 709 551 615
ushort16-bitowa liczba całkowita (bez możliwości przechowywania liczb ujemnych)0 do 65 535

Krok 1. Układ komponentów na formatce

Na formatce umieszczamy poniższe komponenty

układ komponentów

Komponent Label posłuży nam do wyświetlenia informacji zwrotnej o rozmiarze typu zmiennej, a komponent ComboBox będzie pełnił rolę kontenera na sztywno wprowadzone nazwy typów wartościowych języka C#.

komponent ComboBox visual studio

Krok 2. Zwracamy rozmiar dowolnego typu zmiennej na przykład typu float

Do tego celu wykorzystamy zdarzenie kliknięcia klawisza a treść komunikatu wyślemy do komponentu Label

Wykorzystamy jednoargumentowy operator siezeof(), który zwraca liczbę bajtów zajmowaną przez zmienną danego typu. Instrukcja zwracająca rozmiar

label1.Text = Convert.ToString(sizeof(float))+" B; ";

Jeżeli chcesz zmierzyć rozmiar zadeklarowanej zmiennej, to należy użyć polecenia z klasy Marshal (przestrzeń nazw using System.Runtime.InteropServices;)

int x;
int rozmiar = Marshal.SizeOf(x);

Przykładowa zawartość funkcji obsługującej kliknięcie klawisza może wyglądać jak poniżej

private void Button1_Click(object sender, EventArgs e)
{
label1.Text = Convert.ToString(sizeof(float))+" B";
}

Jeżeli chcemy odczytać przedział zakresu dla danego typu zmiennych, to używamy poleceń MinValue i MaxValue przypisanych przy klasie wybranego typu. Zmodyfikowane ciało funkcji przyjmie postać:

label1.Text = Convert.ToString(sizeof(float))+" B; ";
label1.Text = label1.Text + " min:" + float.MinValue.ToString() + " max:" + float.MaxValue.ToString();

Krok 3. Ustalamy właściwości komponentu ComboBox

Wygląd stylu komponentu ustalimy na DropDownList

stylu komponentu ustalimy na DropDownList

Zawartość treści listy komponentu ComboBox wprowadzamy poprzez wbudowany edytor kolekcji ciągów listy, który przypisany jest do właściwości Items

Zawartość treści listy komponentu combobox visual studio

Każdy kolejno wprowadzony wiersz tworzy kolekcję listy

Każdy kolejno wprowadzony wiersz tworzy kolekcję listy

Krok 4. Odczyt aktywnego indeksu komponentu ComboBox

Wprowadzone wiersze do kolekcji są indeksowane od pozycji 0 wzwyż. Jeżeli nic nie wybrano z listy ComboBox, to aktywny indeks wynosi -1 (minus jeden). Sprawdzenie aktywnego indeksu komponentu ComboBox odbywa się poprzez polecenie SelectedIndex, na przykład

comboBox1.SelectedIndex

Odczyt aktywnego tekstu dla tego komponentu, to wykonanie instrukcji

comboBox1.Text

Wykorzystamy te instrukcje oraz instrukcję switch w celu zautomatyzowania odczytu rozmiarów i zakresów wprowadzonych typów wartościowych do kolekcji komponentu ComboBox

Krok 5. Zwracamy komunikat o rozmiarze i zakresie wybranego typu zmiennych

Zwracamy komunikat o rozmiarze i zakresie wybranego typu zmiennych

Instrukcja zaznaczenia switch, wybiera jedną z sekcji case po sprawdzeniu dopasowania wzorca. W naszym rozwiązaniu musimy zadbać o prawidłową kolejność definiowania wzorca sekcji case. Kolejność musi być zgodna z kolejnością wprowadzonej kolekcji komponentu ComboBox.

Przykładowy komunikat wysyłany do komponentu Label może być zrealizowany jak poniżej

private void Button2_Click(object sender, EventArgs e)
{
string s = "Typ: "+comboBox1.Text +"; rozmiar:";
switch (comboBox1.SelectedIndex)
{
case 0: label1.Text =s + Convert.ToString(sizeof(bool)) + "B";break;
case 1: label1.Text =s + Convert.ToString(sizeof(byte)) + "B; min: "+byte.MinValue.ToString()+", max:" +byte.MaxValue.ToString();break;
case 2: label1.Text = s + Convert.ToString(sizeof(char)) + "B; min: " + char.MinValue.ToString() + ", max:" + char.MaxValue.ToString(); break;
case 3: label1.Text = s + Convert.ToString(sizeof(decimal)) + "B; min: " + decimal.MinValue.ToString() + ", max:" + decimal.MaxValue.ToString(); break;
......
......
......
case 12: label1.Text = s + Convert.ToString(sizeof(ushort)) + "B; min: " + ushort.MinValue.ToString() + ", max:" + ushort.MaxValue.ToString(); break;
}
}

Pełny kod zapisany w pliku Form1.cs utworzonej formatki

Form1.cs:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace rozmiarZmiennej
{
    
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Button1_Click(object sender, EventArgs e)
        {
            label1.Text = Convert.ToString(sizeof(float))+" B; ";
            label1.Text = label1.Text + " min:" + float.MinValue.ToString() + " max:" + float.MaxValue.ToString();
        }

        private void Button2_Click(object sender, EventArgs e)
        {
            string s = "Typ: "+comboBox1.Text +"; rozmiar:";
            switch (comboBox1.SelectedIndex)
            {
                case 0: label1.Text =s + Convert.ToString(sizeof(bool)) + "B";break;
                case 1: label1.Text =s + Convert.ToString(sizeof(byte)) + "B; min: "
                                       + byte.MinValue.ToString()+", max:" 
                                       + byte.MaxValue.ToString();break;
                case 2: label1.Text = s + Convert.ToString(sizeof(char)) + "B; min: " 
                                        + char.MinValue.ToString() + ", max:" 
                                        + char.MaxValue.ToString(); break;
                case 3: label1.Text = s + Convert.ToString(sizeof(decimal)) + "B; min: " 
                                        + decimal.MinValue.ToString() + ", max:" 
                                        + decimal.MaxValue.ToString(); break;
                case 4: label1.Text = s + Convert.ToString(sizeof(double)) + "B; min: " 
                                        + double.MinValue.ToString() + ", max:" 
                                        + double.MaxValue.ToString(); break;
                case 5: label1.Text = s + Convert.ToString(sizeof(float)) + "B; min: " 
                                        + float.MinValue.ToString() + ", max:" 
                                        + float.MaxValue.ToString(); break;
                case 6: label1.Text = s + Convert.ToString(sizeof(int)) + "B; min: " 
                                        + int.MinValue.ToString() + ", max:" 
                                        + int.MaxValue.ToString(); break;
                case 7: label1.Text = s + Convert.ToString(sizeof(long)) + "B; min: " 
                                        + long.MinValue.ToString() + ", max:" 
                                        + long.MaxValue.ToString(); break;
                case 8: label1.Text = s + Convert.ToString(sizeof(sbyte)) + "B; min: " 
                                        + sbyte.MinValue.ToString() + ", max:" 
                                        + sbyte.MaxValue.ToString(); break;
                case 9: label1.Text = s + Convert.ToString(sizeof(short)) + "B; min: " 
                                        + short.MinValue.ToString() + ", max:" 
                                        + short.MaxValue.ToString(); break;
                case 10: label1.Text = s + Convert.ToString(sizeof(uint)) + "B; min: " 
                                         + uint.MinValue.ToString() + ", max:" 
                                         + uint.MaxValue.ToString(); break;
                case 11: label1.Text = s + Convert.ToString(sizeof(ulong)) + "B; min: " 
                                         + ulong.MinValue.ToString() + ", max:" 
                                         + ulong.MaxValue.ToString(); break;
                case 12: label1.Text = s + Convert.ToString(sizeof(ushort)) + "B; min: " 
                                         + ushort.MinValue.ToString() + ", max:" 
                                         + ushort.MaxValue.ToString(); break;
            }
        }

        private void Button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
Układ okresowy- kod qr
Układ okresowy

Układ okresowy pierwiastków- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Alkomat- wirtualny test kod qr
Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Taklarz- olinowanie stałe kod qr
Olinowanie stałe- kalkulator średnic

Olinowanie stałe- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
przepis na gogfry

Przepis na gofry

zobacz
przepis na bitą śmietanę

Przepis na bitą śmietanę

zobacz