c concepts constructor
W tym samouczku wyjaśniono niektóre z ważnych pojęć w programowaniu w języku C #, takich jak konstruktor, niszczyciel, klasa statyczna, struktury i wyliczenia:
W jednym z naszych poprzednich tutoriali o obiektach i klasach dowiedzieliśmy się, czym są klasa i obiekt.
Obiekt jest podobny do obiektu ze świata rzeczywistego, a klasa jest logiczną kolekcją podobnych rodzajów obiektów. Jest to jeden z najbardziej podstawowych typów występujących w C #. W tym samouczku zagłębimy się w inne powiązane koncepcje języka C #.
=> Poznaj całą serię szkoleń C # tutaj
W tym samouczku dowiemy się o kilku ważnych aspektach zajęć oraz o tym, jak możemy ich używać w naszych programach. Postaramy się stworzyć proste programy C # w oparciu o koncepcje, których nauczyliśmy się w naszych poprzednich samouczkach.
Czego się nauczysz:
- Co to jest konstruktor w C #?
- Destruktory w C #
- Statyczne składowe w klasie
- Klasa statyczna w C #
- Struktury w C #
- Różnica między strukturą a klasą
- Struktura: definicja
- Wyliczenia w C #
- Właściwości w C #
- Wniosek
- rekomendowane lektury
Co to jest konstruktor w C #?
Konstruktor jest specjalnym typem metody w języku programowania C #, która jest wywoływana lub wywoływana automatycznie podczas tworzenia obiektu danej klasy.
Jego główną funkcją jest inicjalizacja składowych danych nowo utworzonego obiektu. Jedną z najbardziej charakterystycznych cech konstruktora jest jego nazwa. Ma taką samą nazwę jak klasa.
Konstruktorzy są zasadniczo dwojakiego rodzaju:
- Domyślna
- Sparametryzowane
C # domyślny konstruktor
Jak sama nazwa wskazuje, domyślny konstruktor jest podstawowym konstruktorem klasy. Nie ma żadnego argumentu i jest bezpośrednio wywoływana podczas tworzenia obiektu.
public class Program { public Program(){ Console.WriteLine('Constructor has been invoked'); } public static void Main(string[] args) { Program p = new Program(); } }
Wynikiem tego programu będzie:
Wywołano konstruktora
Wyjaśnienie
Zdefiniowaliśmy konstruktor „Program” w klasie „Program”. Teraz, gdy inicjalizujemy klasę wewnątrz metody main, konstruktor jest wywoływany automatycznie.
W związku z tym zostanie wywołany dowolny fragment kodu, który trzymaliśmy w konstruktorze. Tutaj wypisaliśmy komunikat „Wywołano konstruktor” w nawiasach klamrowych konstruktora, więc kiedy inicjalizujemy klasę, konstruktor zostanie domyślnie zainicjowany, a wiadomość zostanie wydrukowana jako wynik.
Konstruktor sparametryzowany
Jak nazwa sugeruje, sparametryzowane konstruktory są konstruktorami z parametrami. Te konstruktory służą do przekazywania różnych wartości do obiektów.
public class Details { public Details(int a, int b){ int c = a+b; Console.WriteLine('The sum is: '+ c); } } public class Program { public static void Main(string[] args) { Details d = new Details(2, 3); } }
Wynikiem tego programu będzie:
ilu jest dostawców poczty e-mail
Suma wynosi: 5
Wyjaśnienie
W naszym poprzednim przykładzie z domyślnym konstruktorem mamy naszą główną metodę w tej samej klasie. W tym przykładzie mamy główną metodę w innej klasie.
Mamy jedną klasę o nazwie „Details”, która zawiera sparametryzowany konstruktor akceptujący dwie liczby całkowite. W konstruktorze wypisujemy sumowanie liczb całkowitych. Mamy inną klasę o nazwie „Program”, która zawiera naszą główną metodę. W głównej metodzie zainicjowaliśmy klasę „Details”.
Jak wyjaśniono wcześniej, gdy klasa jest inicjowana, jej konstruktory są wywoływane automatycznie. Tak więc w tym przypadku została wywołana nasza metoda konstruktora „Details”, która po przekazaniu parametru podczas inicjalizacji wypisuje wynik.
Destruktory w C #
Destruktory są przeciwieństwem konstruktorów. Jest to specjalna metoda klasy, która jest wywoływana, gdy obiekt klasy wychodzi poza zasięg. Podobnie jak konstruktor, nazwa destruktora jest dokładnie taka sama jak nazwa klasy, ale z przedrostkiem „~” (tylda).
Destructor nie przyjmuje żadnego parametru ani nie zwraca żadnej wartości. Destructor niszczy obiekty klasy, dlatego jest używany głównie do zwalniania pamięci po wykonaniu programu. Inną ważną rzeczą, na którą należy zwrócić uwagę w przypadku destruktora, jest to, że nie można go ani przeciążać, ani dziedziczyć.
Przykład destruktorów:
public class Program { public Program(){ Console.WriteLine('Constructor has been invoked'); } ~Program(){ Console.WriteLine('Destructor has been invoked'); } public static void Main(string[] args) { Program p = new Program(); } }
Wynikiem tego programu będzie:
Wywołano konstruktora
Wywołano niszczyciel
Wyjaśnienie
Użyliśmy tego samego przykładu, którego użyliśmy do nauki konstruktora. Właśnie dodaliśmy destruktor w klasie programu (~ Program). Kiedy inicjalizujemy obiekt klasy, wywoływany jest konstruktor i tworzony jest obiekt klasy. Spowoduje to wyświetlenie frazy „Wywołano konstruktor” na konsoli.
Gdy wykonanie zostanie zakończone i obiekt klasy wyjdzie poza zakres, program przechodzi w kierunku destruktora. Następnie wywoływany jest destruktor, który z kolei niszczy obiekt. Tutaj wypisaliśmy wiadomość wewnątrz destruktora, która jest wypisywana do konsoli po wywołaniu destruktora.
Statyczne składowe w klasie
Elementy członkowskie klasy można zadeklarować jako statyczne za pomocą słowa kluczowego static. Gdy obiekt zostanie zadeklarowany jako statyczny, niezależnie od liczby utworzonych obiektów, będzie tylko jedna kopia obiektu statycznego.
Bycie statycznym oznacza, że będzie istniało pojedyncze wystąpienie elementu członkowskiego dla danej klasy. Oznacza to, że wartość funkcji statycznej lub zmiennych wewnątrz klasy można wywołać bez tworzenia dla nich obiektu.
Zmienne statyczne służą do deklarowania stałych, ponieważ ich wartości można uzyskać bezpośrednio, wywołując klasę, zamiast tworzyć jej instancję.
Przykład:
przekonwertuj liczbę znaków na int c ++
public class Details { public static void stat(){ Console.WriteLine('Static method invoked'); } } public class Program { public static void Main(string[] args) { Details.stat(); } }
Wynikiem tego programu będzie:
Wywołano metodę statyczną
Wyjaśnienie
W powyższym przykładzie utworzyliśmy klasę „Szczegóły”, która zawiera statyczną metodę „stat”. Mamy inną klasę „Program”, która zawiera główną metodę. W naszych poprzednich tematach widzieliśmy, jak możemy zainicjować klasę, aby uzyskać dostęp do metod. Jednak, jak omówiliśmy, dostęp do statycznych elementów składowych klasy można uzyskać za pomocą inicjalizacji obiektu klasy.
Tak więc w metodzie main właśnie wywołaliśmy metodę przy użyciu klasy bezpośrednio, bez tworzenia żadnego obiektu. Wyjście programu wykonało kod zapisany w metodzie statycznej. W tym przypadku wypisaliśmy wiadomość na konsoli.
Klasa statyczna w C #
Klasa statyczna jest podobna do zwykłej klasy w języku C #. Klasa statyczna może mieć tylko statyczne elementy członkowskie i nie można jej utworzyć. Klasa statyczna jest używana, aby upewnić się, że klasa nie jest tworzona. Klasa statyczna jest zadeklarowana przy użyciu słowa kluczowego static przed klasą słowa kluczowego podczas deklaracji.
Przykład:
public static class Details { public static void multiply(int a, int b){ int c = a*b; Console.WriteLine('Multiplication result is: '+c); } } public class Program { public static void Main(string[] args) { Details.multiply(2,8); } }
Wynikiem tego programu będzie:
Wynik mnożenia to: 16
Wyjaśnienie
W powyższym przykładzie stworzyliśmy statyczną klasę „Details”, a wewnątrz statycznej klasy stworzyliśmy kolejną statyczną metodę „multiply”. Wewnątrz metody mamy kilka fragmentów kodu, które chcemy wykonać. Mamy też inną klasę „Program” z metodą główną.
Wewnątrz metody main wywołaliśmy metodę multiply obecną w klasie statycznej. Jeśli spojrzysz na naszą główną metodę, zobaczysz, że nie zainicjowaliśmy ani nie utworzyliśmy obiektu dla klasy statycznej, zamiast tego bezpośrednio wywołaliśmy klasę z metody main.
Tak więc, gdy bezpośrednio wywołujemy metodę multiply, używając nazwy klasy i podając parametry, wykonuje kod i drukuje dane wyjściowe.
Struktury w C #
Jednostka typu wartości w C # jest nazywana strukturą. Pomaga użytkownikowi przechowywać powiązane dane kilku różnych typów danych w jednej zmiennej. Jak stwierdzono, struktura jest encją typu wartości, która zawiera pola, metody, konstruktory, operatory, zdarzenia itp. Struktura jest deklarowana przy użyciu słowa kluczowego „struct”.
Cechy struktur:
- Może zawierać stałe, metody, właściwości, indeks, operatory, konstruktory itp.
- Nie może mieć żadnego domyślnego konstruktora.
- Może implementować interfejs, ale nie może dziedziczyć z innymi strukturami lub klasami.
- Struktury muszą zostać zainicjowane przy użyciu nowego słowa kluczowego do użycia.
Różnica między strukturą a klasą
Struktura i klasa mogą wydawać się do siebie podobne, ale mają kilka różnic.
Różnice obejmują:
- Struktura jest typem wartości, podczas gdy klasa jest typem referencyjnym.
- Nowe słowo kluczowe jest wymagane do zainicjowania struktur.
- Struktury mogą mieć tylko sparametryzowany konstruktor, az drugiej strony klasa może mieć zarówno konstruktory domyślne, jak i sparametryzowane.
Struktura: definicja
Strukturę można zdefiniować za pomocą słowa kluczowego struct. Struktura może zdefiniować nowy typ danych z kilkoma różnymi członkami programu.
Strukturę można zainicjować w sposób podobny do inicjalizacji obiektu, tj. Za pomocą słowa kluczowego new. Ponieważ struktura jest jednostką typu wartości, działa szybciej niż obiekt klasy. Wszędzie tam, gdzie zachodzi potrzeba przechowywania danych, musimy skorzystać ze struktury. Z drugiej strony, jeśli chcesz przesłać dane, lepiej jest użyć klasy niż struktury.
Przykład:
public struct Cuboid { public int length; public int width; public int height; } public class Program { public static void Main(string[] args) { Cuboid cb = new Cuboid(); cb.length = 10; cb.width = 20; cb.height = 30; Console.WriteLine('The volume of cuboid is: {0}', (cb.length*cb.width*cb.height)); } }
Wynikiem tego programu będzie:
Objętość prostopadłościanu: 6000
Wyjaśnienie
W powyższym przykładzie zdefiniowaliśmy prostopadłościan struktury, w którym przechowywaliśmy typy danych dotyczące długości, szerokości i wysokości prostopadłościanu. Mamy inny program klasowy, w którym mamy naszą główną metodę.
W głównej metodzie inicjalizujemy strukturę „prostopadłościanu” za pomocą słowa kluczowego new. Następnie użyliśmy obiektu do wywołania i przypisania wartości do typów danych przechowywanych w strukturze. Następnie wykonaliśmy operację na zmiennych ze struktury i wydrukowaliśmy wynik na konsoli.
Tak więc, jeśli chcesz użyć dowolnej właściwości, zdarzeń lub metod, struktura musi zostać zainicjowana przy użyciu słowa kluczowego new, w przeciwnym razie spowoduje to błąd kompilacji.
Wyliczenia w C #
Enum jest zbiorem stałych całkowitych i podobnie jak struktura jest również jednostką typu wartości. Służy głównie do deklarowania listy liczb całkowitych za pomocą słowa kluczowego „enum” wewnątrz przestrzeni nazw, klasy lub nawet struktury. W enum podajemy nazwę każdej ze stałych całkowitych, abyśmy mogli odnieść się do nich, używając ich odpowiednich nazw.
Wyliczenie może mieć stałą liczbę stałych. Pomaga w poprawie bezpieczeństwa i można po nim pokonywać.
Funkcje Enum
- Enum poprawia czytelność i łatwość utrzymania kodu poprzez dostarczanie stałych znaczących nazw.
- Nie można użyć wyliczenia ze stałymi typu łańcuchowego.
- Wyliczenie może zawierać stałe, takie jak int, long, short, byte itp.
- Domyślnie wartość stałych wyliczeniowych zaczyna się od zera
Deklarowanie wyliczenia
Poniżej podano składnię deklarowania wyliczenia.
enum { list of integer constants };
Wszystkie stałe wyliczeniowe mają wartości domyślne. Wartość zaczyna się od 0 i przesuwa się po kolei w górę.
Przykład:
public enum Cuboid{ length, width, height } public class Program { public static void Main(string[] args) { int l = (int)Cuboid.length; int w = (int)Cuboid.width; int h = (int)Cuboid.height; Console.WriteLine('The length is :{0}”, l); Console.WriteLine('The width is :{0}”, w); Console.WriteLine('The height is :{0}”, h); } }
Wynikiem tego programu będzie:
Długość wynosi: 0
Szerokość to: 1
Wysokość: 2
Wyjaśnienie
Pracowaliśmy z podobnym przykładem, którego nauczyliśmy się podczas struct. W tym przykładzie utworzyliśmy wyliczenie o nazwie Cuboid. To wyliczenie zawiera trzy elementy, tj. Długość, szerokość i wysokość.
Mamy kolejną klasę Program, w której znajduje się nasza główna metoda. Do konwersji zmiennych typu wyliczeniowego na typ całkowity zastosowano jawne rzutowanie, a następnie zapisaliśmy ich wartości w różnych zmiennych wewnątrz metody main i wydrukowaliśmy je na konsolę.
Domyślnie wartość pierwszego wyliczenia będzie równa zero, druga będzie miała 1 i tak dalej. Dlatego podczas drukowania wartości otrzymaliśmy wyżej wymienione dane wyjściowe.
Zmiana wartości wyliczenia
Enum umożliwia również użytkownikom zmianę domyślnego indeksu początkowego członków. Po zmianie początkowego indeksu zmiennej kolejne elementy członkowskie będą miały zaktualizowane wartości w kolejności przyrostowej.
Przypiszmy wartość do pierwszego elementu członkowskiego wyliczenia, który zdefiniowaliśmy w naszym poprzednim przykładzie i zobaczmy, co się stanie:
public enum Cuboid { length = 10, width, height } public class Program { public static void Main(string[] args) { int l = (int)Cuboid.length; int w = (int)Cuboid.width; int h = (int)Cuboid.height; Console.WriteLine('The length is :{0}”, l); Console.WriteLine('The width is :{0}”, w); Console.WriteLine('The height is :{0}”, h); } }
Wynikiem tego programu będzie:
Długość to: 10
Szerokość to: 11
Wysokość: 12
Wyjaśnienie
Kiedy przypiszemy pierwszemu członowi wyliczenia wartość, to wszystkim kolejnym członkom wyliczenia zostanie przypisany przyrost tej wartości. Jak zdefiniowaliśmy, pierwsza wartość to 10, następna to 11, a następna - 12.
Użytkownik może przypisać dowolną wartość zgodnie z własnym wyborem, a wszyscy członkowie wyliczenia zostaną automatycznie przypisani wraz z przyrostem wartości zdefiniowanych przez użytkownika.
Właściwości w C #
Właściwości w C # to w zasadzie nazwane elementy członkowskie interfejsu, klas i struktury. Właściwości są rozszerzeniem zmiennych składowych / metody struktury lub klasy. Służą do czytania, zapisywania lub zmiany wartości pól prywatnych.
Dostęp do właściwości jest taki sam, jak w przypadku pól. Mają metody dostępu, których można używać do pobierania, ustawiania i obliczania wartości. Możemy również umieścić logikę podczas ustawiania wartości we właściwościach. Może być również używany z klasą prywatną, która ogranicza dostęp z zewnątrz, ale jednocześnie umożliwia użytkownikowi użycie właściwości do pobierania lub ustawiania wartości.
Co to są akcesoria?
Akcesory własności stanowią instrukcje, których można używać do odczytu, zapisu lub obliczania danej właściwości. Deklaracja własności może zawierać get, set lub obie.
Przykład:
public class Cube { private int side; //Declare a Side property of type integer public int Side{ get{ return side; } set{ side = value; } } } public class Program { public static void Main(string[] args) { Cube cb = new Cube(); cb.Side = 5; Console.WriteLine('The volume of cube is :{0}', (cb.Side * cb.Side* cb.Side)); } }
Gdy powyższy fragment kodu zostanie pomyślnie skompilowany i wykonany, obserwowane są następujące dane wyjściowe.
Objętość sześcianu wynosi: 125
Wyjaśnienie
W powyższym przykładzie mamy klasę „Cube”, wewnątrz której zadeklarowaliśmy właściwość „Side” typu integer. Następnie otrzymaliśmy i ustawiliśmy właściwość, w której wróciliśmy i podaliśmy wartość po stronie zmiennej.
jak otworzyć plik dat na iPhone
Mamy inną klasę „Program” z główną metodą, w której zainicjowaliśmy klasę Cube i podaliśmy wartość właściwości Side, a następnie wydrukowaliśmy obliczony wynik na konsolę.
Wniosek
W tym samouczku poznaliśmy funkcje składowe klasy. Funkcja członkowska może działać na dowolnym obiekcie klasy, w której jest obecna. Dowiedzieliśmy się również o konstruktorach i destruktorach.
Konstruktory są inicjowane automatycznie w momencie tworzenia obiektu klasy, podczas gdy destruktory niszczą klasę i służą głównie do usuwania alokacji pamięci po zakończeniu wykonywania. Konstruktory mogą być dwojakiego rodzaju, tj. Domyślne i sparametryzowane.
Destruktor nie przyjmuje żadnego parametru ani nie zwraca żadnej wartości. Nazwy konstruktorów i destruktorów są dokładnie takie same, jak nazwa klasy. Dowiedzieliśmy się również o zmiennych statycznych i klasach statycznych oraz o tym, jak można uzyskać do nich dostęp bez korzystania z instancji klas. Dowiedzieliśmy się, że klasa statyczna może mieć tylko statyczne elementy członkowskie.
Omówiliśmy również Struktury lub konstrukcje. Struktury są jednostkami typu wartości i muszą zostać zainicjowane w celu uzyskania dostępu.
Omówiono również wyliczenie i właściwości języka C #. Wyliczenie to zbiór nazwanych stałych całkowitych. Podobnie jak struktura, jest to również jednostka typu wartości. Wyliczenie będzie miało swoich członków, a każdy element członkowski będzie miał własną wartość domyślną.
Na koniec omówiliśmy właściwości, które są rozszerzeniem zmiennych składowych / metody struktury lub klasy. Służą do pobierania, ustawiania lub zmiany wartości pól prywatnych.
=> Zobacz naszą pełną serię szkoleń C # tutaj
rekomendowane lektury
- Statyczny w C ++
- Dziedziczenie w C ++
- Klasy i obiekty w C ++
- Użycie klasy Selenium Select do obsługi elementów rozwijanych na stronie internetowej - Samouczek Selenium nr 13
- Polimorfizm środowiska uruchomieniowego w C ++
- Funkcje znajomego w C ++
- Mockowanie metod prywatnych, statycznych i Void przy użyciu Mockito
- Klasy i obiekty języka C #: szczegółowy samouczek z przykładami