To jest stara wersja strony!
Typ pusty
Typy wartościowe mają wersję typu umożliwiającą przypisanie wartości null
.
Deklaracja:
typ? nazwa = null;
Przykład:
int? a = null; int? b = 42; double? x = null; bool? czy_prawda = null; //int k = null; // ta deklaracja nie jest dozwolona
Typ wyliczeniowy
Typ wyliczeniowy to odmiana typu całkowitego, którego wartości mają przypisane nazwy (wyliczanka).
Deklaracja typu:
enum nazwa_typu { element1, element2, ... };
Przykład:
enum Kolory { Czerwony , Niebieski , Zielony , Czarny }
Cechy
- słowo
enum
definiuje nowy typ wyliczeniowy - deklaracja typu umieszczana jest w zakresie przestrzeni nazw lub klasy
- lista elementów reprezentuje kolejne wartości całkowite od 0
internal class Program { enum Kolory { Czerwony, Niebieski, Zielony, Czarny } static void Main(string[] args) { // deklaracja zmiennej Kolory kolor1; // przypisanie wartości kolor1 = Kolory.Czerwony; Console.WriteLine("Zmienna zawiera wartość {0}" , kolor1); Console.WriteLine("Wartość całkowita to {0}", (int)kolor1); } }
Przykład użycia
Na zmiennych typu wyliczeniowego można wykonywać wszystkie operacje poprawne dla typu całkowitego.
enum Kolory { Czerwony, Niebieski, Zielony, Czarny } static void Main(string[] args) { Kolory kolor1 = Kolory.Zielony; kolor1++; Console.WriteLine("Następny kolor to {0}", kolor1); for (var k = Kolory.Czerwony; k < Kolory.Czarny; k++) { Console.WriteLine($"Kolor: {k} o wartości {(int)k}"); } }
Wyjście
Następny kolor to Czarny Kolor: Czerwony o wartości 0 Kolor: Niebieski o wartości 1 Kolor: Zielony o wartości 2 Kolor: Czarny o wartości 3
Przypisanie wartości
Wartościom wyliczeniowym możemy przypisać własne wartości liczbowe
enum Kolory { Zielony = 5, Czerwony, Czarny = 10 } static void Main(string[] args) { for (var k = Kolory.Zielony; k <= Kolory.Czarny; k++) { Console.WriteLine($"Kolor: {k} o wartości {(int)k}"); } }
Wyjście
Kolor: Zielony o wartości 5 Kolor: Czerwony o wartości 6 Kolor: 7 o wartości 7 Kolor: 8 o wartości 8 Kolor: 9 o wartości 9 Kolor: Czarny o wartości 10
Struktury
- Struktura to typ wartościowy przechowujący elementy różnego typu.
- pola - elementy struktury identyfikowane nazwami
- ułatwiają organizację danych - struktura jest obiektem
- struktura może być argumentem metody oraz typem zwracanym metody
Deklaracja typu strukturalnego
Składnia
struct nazwa_typu { modyfikator_dostępu typ1 nazwa_pola1; modyfikator_dostępu typ2 nazwa_pola2; ... };
Przykład:
struct Osoba { public string Imię; public int Wiek; }
Definicja zmiennej typu strukturalnego
Osoba student; Osoba pracownik = new Osoba();
Dostęp do pól za pomocą kropki
student.imię = "Janek"; int x = pracownik.Wiek;
Dostęp do pól
s.średnia = 5.0; string s = s.nazwisko;
Przykład
struct Osoba { public string Imię; public int Wiek; } static void Main(string[] args) { Osoba student; student.Imię = "Janek"; student.Wiek = 33; Console.WriteLine(student.Imię); Console.WriteLine(student.Wiek); }
Struktury a klasy
- struktury maja wiele podobnych mechanizmów jak klasy: konstruktory, meotody, właściwości, ..
- struktury to typ wartościowy a klasy referencyjny
- struktury nie wspierają dziedziczenia (ale to już inny temat)
Osoba student = new Osoba(); student.Imię = "Jan"; Osoba x = student; // kopiowanie wartości x.Imię = "Marek"; Console.WriteLine(student.Imię); Console.WriteLine(x.Imię);
Wynik:
Jan Marek
Inicjowanie struktur
struct student { int numer ; char nazwisko [ 5 ] ; } ; struct student janek = { 1 3 , " ABC " } ; struct student franek = { 5 , { ’A ’ , ’B ’ , ’C ’ } }
Konstruktor
Konstruktor to metoda struktury o takiej samej nazwie jak nazwa struktury. Służy do inicjowania wartości pól.
struct Student { int numer ; char nazwisko [ 5 ] ; public Student(int numer, string nazwisko) { numer = numer; nazwisko = nazwisko; } } ; Student janek = new Student(1, "Nowak");
Tablica struktur
kod tutaj
Ćwiczenie
Zadanie 6 Baza danych osobowych
Ćwiczenie: baza danych
Zaimplementuj prostą bazę danych osobowych składającą się z sekwencji rekordów zawierających dane osobowe: imię, nazwisko i wiek osób umieszczonych w bazie danych. Struktury zawierające dane przechowuj w odpowiedniej tablicy. Dla uproszczenia zakładamy, że maksymalna ilość rekordów nie przekroczy 1000. Program po uruchomieniu wypisuje menu z możliwymi akcjami do wykonania po podaniu liczby od 1 do 5:
wyswietl - wyświetlenie całej bazy danych dodaj - dodanie nowego rekordu do bazy danych usun - usunięcie rekordu z bazy danych wskazanego przez numer zamien - modyfikacja zawartości rekordu wskazanego przez numer zamknij - zamkniecie programu
Zaimplementuj wszystkie funkcjonalności opisane w powyższym menu. Zadbaj o obsługę sytuacji wyjątkowych, np. gdy podczas usuwania rekordu użytkownik poda niepoprawny numer. Po wykonaniu akcji 1, 2, 3 lub 4 menu ponownie jest wyświetlane i użytkownik ponownie może wykonać jedną z akcji. Wybranie pozycji nr 5 kończy działanie programu.