Samouczek języka C #: Podstawy potrzebne do opanowania języka C #



Ten artykuł na temat samouczka języka C # pomoże Ci uzyskać szczegółową wiedzę na temat podstaw języka C # wraz z przykładami w czasie rzeczywistym dla lepszego zrozumienia.

C # jest wszechstronnym i solidnym językiem programowania opracowanym przez Microsoft Corporation w 2000 roku jako śmiertelny konkurent Javy. Jest to najpopularniejszy i dominujący język programowania, jeśli chodzi zarówno o tworzenie aplikacji internetowych, jak i aplikacji komputerowych.

W tym samouczku języka C # nauczymy się następujących pojęć.





Podstawy języka C #

Wprowadzenie do języka programowania C #

We wczesnych latach 90. Java była wiodącym językiem programowania do tworzenia stron internetowych, tworzenia aplikacji komputerowych i wielu innych dziedzin. Microsoft chciał wymyślić konkurenta z wieloma zaawansowanymi funkcjami, które mogą zostawić Javę daleko w tyle.



C#-Tutorial-hejlsberg_bio

To było w 2000 roku, Anders Hejlsberg a jego zespół Microsoft wpadł na pomysł C # popularnie zwanego C-Sharp. Inicjatywa ta została zatwierdzona przez Międzynarodową Organizację Normalizacyjną (POWAŻNY) oraz Europejskie Stowarzyszenie Producentów Komputerów (ECMA). i wreszcie, C # wkracza w świat tworzenia oprogramowania.

Funkcje języka programowania C #



  • Język programowania obiektowego

Podejście programowania zorientowanego obiektowo sprawia, że ​​język C # jest najbardziej przyjazny dla programistów oraz łatwy w tworzeniu i utrzymywaniu języka programowania.

  • Język bezpieczny dla typów

Znaczenie Type-Safe polega na tym, że kompilator uzyska dostęp tylko do lokalizacji pamięci, która ma uprawnienia do wykonywania. Ta funkcja poprawia bezpieczeństwo kodu do poziomu wykładniczego.

  • Interoperacyjność

Funkcja współdziałania sprawia, że ​​C # jest wystarczająco zdolny do robienia wszystkiego, co jest natywne dla C ++ w bardziej wydajny sposób, który może przewyższyć sam C ++.

  • Bogata biblioteka

C # zapewnia dostęp do wielu wbudowanych bibliotek, które zapewniają wstępnie zaprogramowane funkcje w celu skrócenia czasu spędzanego w procesie programowania.

  • Skalowalne i aktualizowalne

C # został zaprojektowany jako lepszy od innych języków programowania. Dlatego jest zawsze otwarty na aktualizacje i zachowuje wysoką skalowalność dzięki swoim funkcjom.

  • Zorientowany na komponenty

Deweloperzy w firmie Microsoft wykorzystali podejście oparte na komponentach do tworzenia języka C #. Jest to najpopularniejsza metodologia programistyczna zapewniająca wysoką skalowalność i aktualizację języka C #.

  • Język strukturalny

Podejście do programowania strukturalnego jest preferowane podczas cyklu życia oprogramowania, ponieważ opracowanie, kompilacja i wdrożenie oprogramowania staje się łatwe w porównaniu z podejściem programowania zorientowanego na procedury.

  • Szybki

Programowanie w C # jest szybsze w kompilacji i wykonywaniu w porównaniu z C ++ i innymi językami programowania.

Instalacja

Udowodniono, że Microsoft Visual Studio jest najlepszym w swojej klasie edytorem do programowania w języku C #. Zainstalujemy i skonfigurujemy Microsoft Visual Studio do wykonywania naszych programów C #, wykonując poniższe kroki:

Krok 1 : Pobierz Microsoft Visual Studio

Google dla najnowsza wersja programu Visual Studio i pobierz zainstalować plik do systemu lokalnego, a następnie biegać plik instalatora jako administrator.

Krok 2: Wybierz pakiet programistyczny .NET Desktop

Po uruchomieniu instalatora edytor Visual Studio zostanie pomyślnie pobrany do systemu lokalnego.Później na ekranie pulpitu zostanie wyświetlone okno dialogowe z pytaniem o konkretny pakiet potrzebujesz w swoim systemie. Tutaj musisz wybrać plik Programowanie .NET Desktop pakiet.

Krok 3: Ustaw środowisko C #

Kiedy twoje paczki dla Programowanie .NET są pobierane, na ekranie pojawi się kolejne okno dialogowe z pytaniem o środowisko programistyczne, którego szukasz. Musisz wybierz środowisko dla języka C #.

Krok 4: Stwórz swój pierwszy projekt

Po ustawieniu środowiska wszystko jest gotowe. Uruchom program Visual Studio i wybierz utwórz nowy projekt w wyświetlonym oknie dialogowym.

Zostaniesz przekierowany do następnego okna dialogowego i tam musisz wybrać Bibliotekę klas jako .NET Standard jak pokazano niżej.

W następnym oknie dialogowym zostaniesz o to poproszony Skonfiguruj swój projekt . Skonfiguruj go i jesteś teraz w edytorze. Napisz swój pierwszy program i biegać to. Dane wyjściowe zostaną pomyślnie wyświetlone na Wiersz polecenia.

przy użyciu klasy systemowej Edureka {static void Main (string [] args) {Console.WriteLine ('Welcome to Edureka !, Happy Learning ..!')}}

//Wynik:

Wykonajmy nasz pierwszy program w języku C #.

Struktura programu C #

Teraz, gdy wykonaliśmy nasz pierwszy program w języku C #, przyjrzyjmy się szczegółowo jego strukturze. Prosty program w języku C # składa się z następujących części.

using System namespace ConsoleApplication1 {public class Edureka {public static void Main (string [] args) {Console.WriteLine ('Welcome to Edureka !, Happy Learning ..!')}}}

//Wynik:

Witamy w Edureka !, Happy Learning ..!

  • klasa: class można ogólnie zdefiniować jako a słowo kluczowe który jest używany do definiowania klasy w programie C #.
  • Edureka: To jest nazwa Klasa. Klasa jest często uważana za plan, który przechowuje elementy członkowskie i metody związane z klasą.
  • Główny: Zasadniczo jest metoda podstawowa całego programu w języku C #, działa jako brama kontrolna umożliwiająca wejście do programu. Jest wykonywany przed wykonaniem jakiejkolwiek innej metody programu.
  • unieważnić: Ten segment kodu jest przypisany do typ zwrotu metody. Może to być dowolny typ danych inny niż void. Void oznacza, że ​​metoda nie ma zwracanych danych.
  • statyczny: To jest słowo kluczowe który mówi, że zadeklarowane elementy członkowskie danych są statyczne, a dedykowana pamięć została przydzielona zadeklarowanym elementom członkowskim.
  • Argumenty typu string []: Przypomina argumenty wiersza poleceń, których używamy w naszym programie. Podczas wykonywania naszego programu w zasadzie przekazujemy niektóre argumenty, które zostaną zaakceptowane przez program z powodu tego oświadczenia.
  • System.Console.WriteLine („Welcome to Edureka!, Happy Learning…!”) Tutaj, System jest przestrzeń nazw. Konsolato właśnie ta kategoria została zarysowanaw przestrzeni nazw System. Plik WriteLine () jest to, żestatycznytechnikakonsolikategoria, która jest wykorzystywana do zapisywaniatekst na konsoli.

Teraz poznajmy typy danych dostępne w języku C #.

Typy danych

Typy danych w C # są podzielone na trzy kategorie opisane poniżej.

Typy danych wartości

Plik Typy danych wartości znajdują się w System.ValueType Library i są zawsze gotowe do bezpośredniego dostępu, a zmienne mogą być bezpośrednio przypisane do określonej wartości. Typy danych wartości są dalej podzielone na dwa typy, jak pokazano poniżej:

  • Predefiniowane typy danych
  • Typy danych zdefiniowane przez użytkownika

Predefiniowane typy danych: Są to te, których zwykle używamy w naszym codziennym programowaniu. Te typy danych są predefiniowane przez programistów języka i są gotowe do użycia przez programistów.

Przykład:

int, float, char, short double itp

Typy danych zdefiniowane przez użytkownika: Są sytuacje, w których może być konieczne przechowywanie różnych wartości z typów danych w jednej zmiennej. W takich przypadkach Predefiniowane typy danych to nie wszystko. Określony przez użytkownika Typy danych są jak typy danych konfigurowalne dla użytkownika.

Przykład: struktura, wyliczenie

Typ danych Zakres przydzielonej pamięci Rozmiar pamięci
podpisany char -128 do 127 1 bajt
unsigned char Od 0 do 127 1 bajt
zwęglać -128 do 127 1 bajt
podpisał krótko -32 768 do 32767 2 bajty
unsigned short 0 do 65 535 2 bajty
krótki -32 768 do 32767 2 bajty
podpisany int -2 147 483 648 do -2 147 483 647 4 bajty
unsigned int Od 0 do 4 294 967 295 4 bajty
int -2 147 483 648 do -2 147 483 647 4 bajty
podpisany długo -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 8 bajtów
unsigned long Od 0 do 18 446 744 073 709 551 615 8 bajtów
długo -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 8 bajtów
pływak 1,5 * 10-45 - 3,4 * 1038, (dokładność 7 cyfr) 4 bajty
podwójnie 5,0 * 10-324 - 1,7 * 10308, (dokładność 15 cyfr) 8 bajtów
dziesiętny -7,9 * 10-28 - 7,9 * 1028, (dokładność 28 cyfr) 16 bajtów


Typ danych wskaźnika

Typ wskaźnika to prosty typ danych. Jego funkcjonalność jest całkowicie podobna do wskaźników w C. Są one przeznaczone do przechowywania adresu innego wskaźnika.

float * ptr

Typy danych odniesienia

Nazwa jest oczywista. Plik Typy danych odniesienia w rzeczywistości nie przechowują zmiennych, zamiast tego przechowują wartość odniesienia do tej konkretnej zmiennej. Innymi słowy, przechowują adres rzeczywistej zmiennej.

Zmienne odniesienia są podzielone na trzy różne typy, jak wspomniano poniżej:

  • Rodzaj obiektu

Typ danych obiektu jest dostępny w System.Object Klasa.Obiektrodzajemoże byćprzypisany dowartościinne typy,odniesienierodzaje, predefiniowany, zdefiniowany przez użytkownikarodzaje. Ale przedtemzadaniewartości, których wymaga rodzaj konwersja.

obiekt abc abc = 50 // to się nazywa boks
  • Typ dynamiczny

Zmienne typu dynamicznego są przeznaczone do przechowywania prawie wszystkich typów wartości. Nazywa się to typem dynamicznym, ponieważ sprawdzanie typów wartości odbywa się w czasie wykonywania

dynamiczny x = 10
  • Typ ciągu

Typ ciągu jest dostępny w System.String klasa. Typ ciągu jest przeznaczony do przechowywania literałów ciągów. Literały ciągów są przechowywane w dwóch formach w plikachdwie formy

    • zacytowany
    • @zacytowany.
Ciąg S = 'Edureka'
  • Plik @zacytowany wygląda literał ciągu
@ „Edureka”

Zrozummy teraz zmienne.

Zmienne

Zmienne to nazwy przydzielone lokacjom pamięci, które przechowują określone dane podane przez użytkownika, a dane te są łatwo dostępne przy użyciu nazwy zmiennej. Istnieje pięć typów zmiennych dostępnych w C #

Rodzaj Przykład
Zero Brak danych
Boolean Prawda i fałsz
Liczba całkowita Int, Char, Byte, Short, Long
Pływak Float i Double
Dziesiętny Dziesiętny

Przykład:

int a, b double x float p char abc

Reguły, których należy przestrzegać, aby deklarować zmienne w C #

public string tostring ()
  • Zmienna może zawierać alfabety, cyfry i podkreślenia.
  • Nazwa zmiennej może zaczynać się tylko od alfabetu lub tylko podkreślenia.
  • Zmienne nie mogą zaczynać się cyfrą ani znakiem specjalnym.
  • Pomiędzy nazwą zmiennej nie są dozwolone spacje.
  • Zastrzeżone słowa kluczowe nie mogą być używane jako nazwy zmiennych.

Operatorzy

Operator można zdefiniować jako specjalny symbol, który wyjaśnia komputerowi wykonywanie określonej operacji matematycznej na zbiorze zmiennych. C # zawiera różne operatory, które są wymienione poniżej.

  • Operatory arytmetyczne
  • Operatorzy relacyjni
  • Operatory logiczne
  • Operatory bitowe
  • Operatory przypisania

Operatory arytmetyczne

Operator Przykład Opis
+ A + B Dodaje dwa operandy
- A - B Odejmuje dwa operandy
* A * B Mnoży dwa operandy
/ A / B Dzieli dwa operandy
% A% B Pozostała część dwóch operandów
++ A ++ Operacja przyrostowa
- DO- Operacja zmniejszania

Operatorzy relacyjni

Operator Przykład Opis
== A == B. Prawda, jeśli oba operandy są równe, w przeciwnym razie False
! = A! = B Prawda, jeśli oba operandy nie są równe, Else False
> A> B Prawda, jeśli A jest większa, w przeciwnym razie fałsz
< DO Prawda, jeśli B jest większa, w przeciwnym razie fałsz
> = A> = B Prawda, jeśli A jest większe lub równe, w przeciwnym razie fałsz
<= DO<= B Prawda, id B jest większe równe, w przeciwnym razie fałszywe

Operatory logiczne

Operator Przykład Opis
&& A && B. Prawda, jeśli oba operandy są prawdziwe, w przeciwnym razie False
|| A || b Prawda, jeśli jeden z operandów jest prawdziwy, Else False
! A! b Odwraca stan logiczny operandu

Operatory bitowe

DO b A i B. A | b A ^ B
jeden jeden jeden jeden 0
jeden 0 0 jeden jeden
0 jeden 0 jeden jeden
0 0 0 0 0
Operator Przykład Opis
~ (~ A) Operator dopełniacza binarnego One jest jednoargumentowy i powoduje „odwracanie” bitów.
<< DO<<2 Binarny operator przesunięcia w lewo. Wartość lewych operandów jest przesuwana w lewo o liczbę bitów określoną przez prawy operand.
>> A >> 2 Binarny operator przesunięcia w prawo. Wartość lewego operandu jest przesuwana w prawo o liczbę bitów określoną przez prawy operand.

Operatory przypisania

Operator Przykład Opis
= A = B + C A = B + C, B + C jest przypisane do A.
+ = A + = B A = A + B, A + B jest przypisane do A.
- = A - = B A = A-B, A-B jest przypisane do A
* = A - = B A = A * B, A * B jest przypisane do A
/ = A / = B A = A / B, A / B jest przypisane do A
% = A% = B A = A% B, A% B jest przypisane do A
<<= DO<<= 2 Lewy Shift i Operator przypisania
>> = A >> = 2 Operator prawego przesunięcia i przypisania
& = A & = 2 Operator bitowy i przypisania
^ = A ^ = 2 Operator wyłączności bitowej i przypisania
| = A! = 2 Operator dołączania bitowego i przypisywania

Pętle

DO pętla instrukcja służy do wielokrotnego wykonywania bloku instrukcji, aż do spełnienia określonego warunku. Język C # składa się z następujących instrukcji pętli.

  • Dla pętli
  • While Loop
  • Do While Loop

Dla pętli

Plik dla pętli służy do wielokrotnego wykonywania określonego segmentu kodu, dopóki dany warunek nie zostanie spełniony.

Składnia

for (zwiększanie / zmniejszanie warunku inicjalizacji) {// segment kodu}

FlowChart:

Przykład:

using System public class ForExample {public static void Main (string [] args) {for (int i = 1 i<= 5 i++) { Console.WriteLine(i) } } } 

//Wynik:

jeden
2
3
4
5

While Loop

Plik Podczas pętli służy do wykonywania segmentu kodu wiele razy, aż do spełnienia określonego warunku.

Składnia

while (condition) {// kod do wykonania}

FlowChart:

Przykład:

using System namespace Loops {class Program {static void Main (string [] args) {int x = 5 while (x<= 10) { Console.WriteLine('The value of a: {0}', x) x++ } Console.ReadLine() } } } 

//Wynik:

Wartość a: 5
Wartość a: 6
Wartość a: 7
Wartość a: 8
Wartość a: 9
Wartość a: 10

Do While Loop

Pętla Do while jest całkowicie podobna do While Loop, ale jedyną różnicą jest to, że warunek jest umieszczony na końcu pętli. W związku z tym pętla jest wykonywana przynajmniej raz.

Składnia

do {// kod do wykonania} while (warunek)

FlowChart:

Przykład:

using System namespace Edureka {class DoWhileLoop {public static void Main (string [] args) {int i = 1, n = 5, product do {product = n * i Console.WriteLine ('{0} * {1} = { 2} ', n, i, product) i ++} while (i<= 10) } } } 

//Wynik:

5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
5 * 10 = 50

Warunkowy

Instrukcje warunkowe są używane do wykonania komunikat lub grupa sprawozdania na podstawie pewnych warunków. Jeśli stan: schorzenie jest więc prawdą Instrukcje C # są wykonywane w przeciwnym razie następny komunikat zostanie wykonany.

Poniżej przedstawiono różne typy instrukcji warunkowych w języku C ++:

  1. Jeśli oświadczenie
  2. Instrukcja If-Else
  3. Zagnieżdżona instrukcja If-else
  4. Jeśli-Inaczej Jeśli drabina
  5. Instrukcja Switch

Jeśli oświadczenie

Pojedynczy Jeśli instrukcja w języku C # służy do wykonywania kodu, jeśli warunek jest prawdziwy. Nazywa się to również jednokierunkową instrukcją wyboru.

Składnia

if (wyrażenie-boolowskie) {// instrukcje wykonywane, jeśli wyrażenie-boolowskie jest prawdziwe}

FlowChart:

Przykład:

using System namespace Conditional {class IfStatement {public static void Main (string [] args) {int number = 2 if (number<5) { Console.WriteLine('{0} is less than 5', number) } Console.WriteLine('This statement is always executed.') } } } 

//Wynik:

2 to mniej niż 5
Ta instrukcja jest zawsze wykonywana.

Instrukcja If-Else

Plik Jeśli inaczej instrukcja w języku C służy do wykonania kodu, jeśli warunek jest prawdziwy lub fałszywy. Nazywa się to również dwukierunkową instrukcją selekcji.

Składnia

if (wyrażenie-boolowskie) {// instrukcje wykonywane, jeśli wyrażenie-boolowskie ma wartość true} else {// instrukcje wykonywane, jeśli wyrażenie-boolowskie jest fałszywe}

FlowChart:

Przykład:

using System namespace Conditional {class IfElseStatement {public static void Main (string [] args) {int number = 12 if (number<5) { Console.WriteLine('{0} is less than 5', number) } else { Console.WriteLine('{0} is greater than or equal to 5', number) } Console.WriteLine('This statement is always executed.') } } } 

//Wynik:

12 jest większe lub równe 5
Ta instrukcja jest zawsze wykonywana.

Zagnieżdżona instrukcja If-else

Zagnieżdżony Jeśli inaczej instrukcja jest używana, gdy program wymaga więcej niż jednego wyrażenia testowego. Nazywa się to również instrukcją wyboru wielokierunkowego. Kiedy seria decyzji zawiera się w oświadczeniu, używamy Jeśli inaczej instrukcja w formie zagnieżdżonej.

Składnia

if (wyrażenie-logiczne) {if (wyrażenie-zagnieżdżone-1) {// kod do wykonania} else {// kod do wykonania}} else {if (wyrażenie-zagnieżdżone-2) {// kod do wykonania } else {// kod do wykonania}}

FlowChart:

Przykład:

using System namespace Conditional {class Nested {public static void Main (string [] args) {int first = 7, second = -23, third = 13 if (first & gt second) {if (first

//Wynik:

13 jest największa

Inaczej, jeśli drabina

Plik jeśli-jeszcze-jeśli instrukcja służy do wykonywania jednego kodu z wielu warunków. Nazywa się to również oświadczeniem decyzji wielościeżkowym. Jest to łańcuch instrukcji if..else, w którym każda instrukcja if jest powiązana z instrukcją else if i last byłaby instrukcją else.

Składnia

if (warunek1) {// kod do wykonania, jeśli warunek1 jest prawdziwy} else if (warunek2) {// kod do wykonania, jeśli warunek2 jest prawdziwy} else if (warunek3) {// kod do wykonania, jeśli warunek3 jest prawdziwy} ... else {// kod do wykonania, jeśli wszystkie warunki są fałszywe}

FlowChart:

Przykład:

using System class Edureka {public static void Main (String [] args) {int i = 20 if (i == 10) Console.WriteLine ('i is 10') else if (i == 15) Console.WriteLine (' i wynosi 15 ') else if (i == 20) Console.WriteLine (' i jest 20 ') else Console.WriteLine (' i nie ma ')}}

//Wynik:

mam 20 lat

Instrukcja Switch

Przełącznik instrukcja działa jako substytut długiej drabiny if-else-if, używanej do testowania listy przypadków. Instrukcja switch zawiera jedną lub więcej etykiet przypadków, które są testowane pod kątem wyrażenia switch. Gdy wyrażenie pasuje do przypadku, wówczas zostaną wykonane powiązane instrukcje z tym przypadkiem.

Składnia

switch (zmienna / wyrażenie) {case wartość1: // Instrukcje wykonywane, jeśli wyrażenie (lub zmienna) = wartość1 przerywana wielkość2: // Instrukcje wykonywane, jeśli wyrażenie (lub zmienna) = wartość1 przerywana ... ... ... .. . ... ... default: // Instrukcje wykonywane, jeśli żaden przypadek nie pasuje}

FlowChart:

Przykład:

using System namespace Conditional {class SwitchCase {public static void Main (string [] args) {char ch Console.WriteLine ('Enter an alphabet') ch = Convert.ToChar (Console.ReadLine ()) switch (Char.ToLower (ch )) {case 'a': Console.WriteLine ('Vowel') break case 'e': Console.WriteLine ('Vowel') break case 'i': Console.WriteLine ('Vowel') break case 'o': Console.WriteLine ('Vowel') przypadek przerwania 'u': domyślny podział Console.WriteLine ('Vowel'): przerwa w Console.WriteLine ('Not a samogłoska')}}}}

//Wynik:

Wpisz alfabet
jest
Samogłoska

Smyczki

Strunowy Datatype jest członkiem System.String Klasa. Jest w stanie przechowywać dane typu znakowego. Na Stingach możemy wykonywać różne operacje npkonkatenacja, porównanie, pobieranie podciągu, wyszukiwanie, przycinanie, zamiana i wiele innych.

Analogia String i String

W C # Strunowy i strunowy są równoważne. Ciąg słów to słowo kluczowe i działa jako System.String klasa. Do zadeklarowania ciągów możemy użyć dowolnej z wersji.

Składnia:

string s1 = 'Edureka' // tworzenie ciągu znaków za pomocą słowa kluczowego typu string String s2 = 'Happy Learning' // tworzenie napisów przy użyciu klasy String

Przykład:

using System public class StringExample {public static void Main (string [] args) {string s1 = 'Edureka' char [] ch = {'C', 's', 'h', 'a', 'r', ' p ',' ',' T ',' u ',' t ',' o ',' r ',' i ',' a ',' l '} string s2 = new string (ch) Console.WriteLine ( s1) Console.WriteLine (s2)}}

//Wynik:

Edureka
Csharp Tutorial

Metody ciągów w języku C #

metoda Opis
Klon () Służy do zwracania odwołania do tego wystąpienia String.
Porównaj (ciąg, ciąg) Służy do porównywania dwóch określonych obiektów typu String.
Concat (ciąg, ciąg) Połącz dwa określone wystąpienia String.
Zawiera (ciąg) Zwraca wartość wskazującą określony podciąg
Kopiuj (ciąg) Służy do tworzenia nowego wystąpienia String o tej samej wartości
CopyTo (Int, Char [], Int, Int) Kopiuje znaki z określonej pozycji
Równa się (ciąg, ciąg) Określa, że ​​dwa obiekty String mają tę samą wartość.
Format (ciąg, obiekt) Zastąp co najmniej jeden element formatu w określonym ciągu
IndexOf (ciąg) Podaje liczony od zera indeks pierwszego wystąpienia
Wstaw (Int32, String) Zwraca nowy ciąg, w którym ciąg jest wstawiany w indeksie.
IsInterned (ciąg) Wskazuje, że ten ciąg jest w postaci normalizacji Unicode C.
IsNullOrEmpty (ciąg) Wskazuje, że określony ciąg ma wartość null lub jest ciągiem pustym.
IsNullOrWhiteSpace (ciąg) Służy do wskazania, czy określony ciąg jest pusty, pusty,
Połącz (ciąg, ciąg []) Służy do łączenia wszystkich elementów tablicy ciągów
LastIndexOf (znak) Podaje pozycję indeksu liczonego od zera ostatniego znaku
LastIndexOfAny (Char []) Podaje pozycję indeksu liczonego od zera ostatniego znaku
Usuń (Int32) Zwraca nowy ciąg zawierający wszystkie znaki
Zastąp (ciąg, ciąg) Zwraca nowy ciąg, w którym znajdują się wszystkie wystąpienia ciągu
Podziel (znak []) Służy do dzielenia łańcucha na podciągi
StartsWith (ciąg) Służy do sprawdzenia, czy początek tego ciągu
Podłańcuch (Int32) Służy do pobierania podciągu z tej instancji.
ToCharArray () Kopiuje znaki w tym wystąpieniu do tablicy Unicode.
ToString () Służy do zwracania instancji String.
Trym() Przycina sznurek


Tablice

Podobnie jak w innych językach programowania, C # ma tablice. Tablice to proste struktury danych zaprojektowane do przechowywania tego samego typu danych elementów w ciągłej lokalizacji pamięci.

C # obsługuje następujące typy tablic.

  • Jednowymiarowa tablica
  • Tablica wielowymiarowa
  • Jagged Array

Jednowymiarowa tablica

Tablica jednowymiarowa przechowuje elementy w postaci jednego wiersza.

Składnia

int [] arr = new int [5] // tworzenie tablicy

Przykład:

using System public class ArrayExample {public static void Main (string [] args) {int [] arr = new int [5] arr [0] = 10 arr [1] = 20 arr [2] = 30 arr [3] = 40 arr [4] = 50 dla (int i = 0 i 

//Wynik:

10
dwadzieścia
30
40
pięćdziesiąt

Tablica wielowymiarowa

Tablica wielowymiarowa przechowuje elementy w postaci wielu wymiarów, takich jak macierz i sześcian itp.

Składnia

int val = a [2,3]

Przykład:

using System namespace ArrayApplication {class MyArray {static void Main (string [] args) {int [,] a = new int [5, 2] {{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}} int i, j for (i = 0 i<5 i++) { for (j = 0 j < 2 j++) { Console.WriteLine('a[{0},{1}] = {2}', i, j, a[i, j]) } } Console.ReadKey() } } } 

//Wynik:

a [0,0] = 0
a [0,1] = 0
a [1,0] = 1
a [1,1] = 2
a [2,0] = 2
a [2,1] = 4
a [3,0] = 3
a [3,1] = 6
a [4,0] = 4
a [4,1] = 8

Jagged Array

Jagged Array to po prostu tablica tablic.

Przykład:

using System namespace ArrayApplication {class MyArray {static void Main (string [] args) {int [] [] a = new int [] [] {new int [] {0,0}, new int [] {1,2 }, nowy int [] {2,4}, nowy int [] {3, 6}, nowy int [] {4, 8}} int i, j for (i = 0 i<5 i++) { for (j = 0 j < 2 j++) { Console.WriteLine('a[{0}][{1}] = {2}', i, j, a[i][j]) } } Console.ReadKey() } } } 

//Wynik:

a [0] [0] = 0
a [0] [1] = 0
a [1] [0] = 1
a [1] [1] = 2
a [2] [0] = 2
a [2] [1] = 4
a [3] [0] = 3
a [3] [1] = 6
a [4] [0] = 4
a [4] [1] = 8

Kolekcje

Zbieranie można po prostu traktować jako grupę obiektów zebranych razem, aby zastosować pewne funkcje do zebranych danych. Operacje, które kiedyś można było wykonać na kolekcji, to:

  • przechowywać obiekt
  • obiekt aktualizacji
  • usuń obiekt
  • pobrać obiekt
  • obiekt wyszukiwania i
  • obiekt sortowania

Rodzaje zbiorów

Istnieją trzy różne możliwości pracy z kolekcjami. Trzy przestrzenie nazw są wymienione poniżej:

  • System.Collections.Generic zajęcia
  • System.Collections zajęcia
  • System.Collections.Concurrent zajęcia

Klasa System.Collections.Generic ma następujące odmiany klas:

  • Lista
  • Stos
  • Kolejka
  • Połączona lista
  • HashSet
  • SortedSet
  • Słownik
  • SortedDictionary
  • SortedList

Plik System.Collections klasy są traktowane jako starsze klasy. obejmują następujące klasy.

  • ArrayList
  • Stos
  • Kolejka
  • Hashtable

Plik System.Collections.Concurrent zajęciaprzestrzeń nazw zawiera klasy dla operacji bezpiecznych dla wątków. Teraz wiele wątków nie spowoduje problemu z dostępem do elementów kolekcji. dostępne w tym zajęcia to,

  • BlockingCollection
  • ConcurrentBag
  • ConcurrentStack
  • ConcurrentQueue
  • ConcurrentDictionary
  • Partycje
  • Partycje
  • OrderablePartitioner

Lista

Plik lista jest uważany za strukturę danych dostępną w System.Collection.Generics przestrzeń nazw. Może przechowywać i pobierać elementy. Lista może przechowywać zduplikowane elementy.

Przykład:

using System using System.Collections.Generic publiczna klasa Edureka {public static void Main (string [] args) {var names = new List () names.Add ('Sandhya') names.Add ('Arun') names.Add ( 'Prashanth') names.Add ('Kiran') foreach (var name in names) {Console.WriteLine (name)}}}

//Wynik:

Sandhya
Bieg
Prashanth
Kiran

Hash Set

C # HashSetkategoria jest często przyzwyczajonasklep,na wynoslubprzeczytaj komponenty. Tonieprzechowywać duplikatskładniki.jest naleganyużywać HashSet KategoriaJeślimaszprzechowaćwyłącznie charakterystyczny składniki . jego znaleziono w przestrzeni nazw System.Collections.Generic.

Przykład:

using System using System.Collections.Generic public class Edureka {public static void Main (string [] args) {var names = new HashSet () names.Add ('Sunil') names.Add ('Amar') names.Add ( 'Pujari') names.Add ('Imran') names.Add ('karan') foreach (var name in names) {Console.WriteLine (name)}}}

//Wynik:

Sunil
Amar
Pujari
Imran
karan

Posortowany zestaw

C # SortedSetklasy są często przyzwyczajenisklep, usunąć lub czytać elementy . Utrzymuje porządek rosnący inieprzechowywać duplikatelementy.to jest szybkieużyć SortedSetKategoriaJeślimaszprzechować charakterystyczny składniki i utrzymuj porządek rosnący.jegoznaleziono w przestrzeni nazw System.Collections.Generic.

Przykład:

using System using System.Collections.Generic public class Edureka {public static void Main (string [] args) {var names = new SortedSet () names.Add ('Sanjay') names.Add ('Anuradha') names.Add ( 'Praveen') names.Add ('Ravi') names.Add ('Kajol') foreach (var name in names) {Console.WriteLine (name)}}}

//Wynik:

Anuradha
Kajol
Praveen
Ravi
Sanjay

Stos

Plik stos to prosta kolekcja, która następuje BRZEG lub pierwsze na ostatnim wyjściu podczas przetwarzania przechowywanych w nim elementów.

Przykład:

using System using System.Collections.Generic publiczna klasa Edureka {public static void Main (string [] args) {Stack names = new Stack () names.Push ('Chandan') names.Push ('Pooja') names.Push ( 'James') names.Push ('Rajesh') names.Push ('kumar') foreach (string name in names) {Console.WriteLine (name)} Console.WriteLine ('Peek element:' + names.Peek () ) Console.WriteLine ('Pop:' + names.Pop ()) Console.WriteLine ('After Pop, Peek element:' + names.Peek ())}}

//Wynik:

kumar
Rajesh
James
Pooja
Chandan
Element podglądu: kumar
Pop: kumar
Po Popie element Peek: Rajesh

Kolejka

Kolejka jest całkowicie podobna do stosu, ale jedyną różnicą jest to, że kolejka następuje FIFO czyli zasada „pierwsze weszło i pierwsze wyszło” podczas przetwarzania przechowywanych w nim elementów.

Przykład:

using System using System.Collections.Generic publiczna klasa Edureka {public static void Main (string [] args) {Queue names = new Queue () names.Enqueue ('Srujan') names.Enqueue ('Prajat') names.Enqueue ( 'John') names.Enqueue ('Raju') names.Enqueue ('Hari') foreach (string name in names) {Console.WriteLine (name)} Console.WriteLine ('Peek element:' + names.Peek () ) Console.WriteLine ('Dequeue:' + names.Dequeue ()) Console.WriteLine ('After Dequeue, Peek element:' + names.Peek ())}}

//Wynik:

Srujan
Prajat
Jan
Dziki
Dzień
Element podglądu: Srujan
Dequeue: Srujan
Po Dequeue element Peek: Prajat

Połączona lista

Lista połączona to dynamiczna kolekcja pamięci. Elementy na liście Połączone są przechowywane poprzez dostęp do pamięci ze sterty i przechowywanie elementów w ciągłej kolejności poprzez łączenie ich adresów.

Przykład:

using System using System.Collections.Generic publiczna klasa Edureka {public static void Main (string [] args) {var names = new LinkedList () names.AddLast ('Rajat') names.AddLast ('Arun') names.AddLast ( 'Prakash') names.AddLast ('jay') names.AddFirst ('sai') foreach (var name in names) {Console.WriteLine (name)}}}

//Wynik:

sai
Miedza
Bieg
Prakash
sójka

Słownik

Słownik Kategoriaużywapomysłtablicy haszującej. Przechowuje wartościprzesłankaklucza. ZawieracharakterystycznyKluczewyłącznie. Przezpomocklucza,będziemy po prostuszukaj lubzabierz elementy.jegoznaleziono w przestrzeni nazw System.Collections.Generic.

Przykład:

using System using System.Collections.Generic public class Edureka {public static void Main (string [] args) {Dictionary names = new Dictionary () names.Add ('1', 'Shiva') names.Add ('2', 'Prasad') names.Add ('3', 'Preetam') names.Add ('4', 'Roy') names.Add ('5', 'Akash') foreach (KeyValuePair kv in names) {Console. WriteLine (kv.Key + '' + kv.Value)}}}

//Wynik:

1 Shiva
2 Prasad
3 Preetam
4 Roy
5Akash

Słownik posortowany

Plik SortedDictionary Kategoriaużywaprojekttablicy haszującej. Przechowuje wartościpomysłklucza. Zawieracharakterystycznyklucze i utrzymuje kolejność rosnącąpomysłklucza. Przezpomocklucza,będziemy po prostuszukaj lubzabierz elementy.jegoznaleziono w przestrzeni nazw System.Collections.Generic.

Przykład:

using System using System.Collections.Generic public class Edureka {public static void Main (string [] args) {SortedDictionary names = new SortedDictionary () names.Add ('1', 'Arun') names.Add ('4', 'Vishal') names.Add ('5', 'Ramesh') names.Add ('3', 'Vidya') names.Add ('2', 'Pallavi') foreach (KeyValuePair kv in names) {Console. WriteLine (kv.Key + '' + kv.Value)}}}

//Wynik:

1 Shiva
2 Prasad
3 Preetam
4 Roy
5Akash

Lista posortowana

Plik SortedList jestnatablica par klucz / wartość. Przechowuje wartościprzesłankaklucza. SortedListKategoriazawieracharakterystycznyklucze i utrzymuje kolejność rosnącąprzesłankaklucza. Przezpomocklucza,jesteśmy w stanie po prostuwyszukaj lub usuńelementy.jegoznalezione w System.Collections.Generic przestrzeń nazw.

Przykład:

using System using System.Collections.Generic public class Edureka {public static void Main (string [] args) {SortedDictionary names = new SortedDictionary () names.Add ('1', 'Arun') names.Add ('4', 'Vishal') names.Add ('5', 'Ramesh') names.Add ('3', 'Vidya') names.Add ('2', 'Pallavi') foreach (KeyValuePair kv in names) {Console. WriteLine (kv.Key + '' + kv.Value)}}}

//Wynik:

1 Arun
2 Pallavi
3 Vidya
4 Vishal
5Ramesh

Struktura

Struktura jest typem danych zdefiniowanym przez użytkownika, zaprojektowanym do przechowywania wielu elementów o różnych typach danych. Struktura jest deklarowana za pomocą słowa kluczowego struct.

Przykład:

using System struct Books {public string title public string autor public string subject public int book_id} public class Edureka {public static void Main (string [] args) {Books Book1 Books Book2 Book1.title = 'Programowanie w C #' Book1.author = ' Ramchandra Kumar 'Book1.subject =' Samouczek programowania w C ++ 'Book1.book_id = 95908978 Book2.title =' Telecom Billing 'Book2.author =' Karan 'Book2.subject =' Telecom Billing Tutorial 'Book2.book_id = 18674900 Console.WriteLine ( „Book 1 title: {0}”, Book1.title) Console.WriteLine ('Book 1 Author: {0}', Book1.author) Console.WriteLine ('Book 1 subject: {0}', Book1.subject) Console.WriteLine ('Book 1 book_id: {0}', Book1.book_id) Console.WriteLine ('Book 2 title: {0}', Book2.title) Console.WriteLine ('Book 2 Author: {0}', Book2.author) Console.WriteLine ('Book 2 subject: {0}', Book2.subject) Console.WriteLine ('Book 2 book_id: {0}', Book2.book_id) Console.ReadKey ()}}

//Wynik:

Książka 1 tytuł: Programowanie w C #
Książka 1 Autor: Ramchandra Kumar
Książka 1 temat: Samouczek programowania w C ++
Książka 1 book_id: 95908978
Tytuł książki 2: Telecom Billing
Księga 2 Autor: Karan
Temat książki 2: Samouczek dotyczący rozliczeń telekomunikacyjnych
Książka 2 book_id: 18674900

Funkcje

Funkcja jest zdefiniowana jako blok kodu głównego kodu. Funkcja służy do wykonywania instrukcji określonych w bloku kodu. Funkcja składa się z następujących komponentów.

  • Nazwa funkcji: Jest to charakterystyczna nazwa używana do wywołania funkcji.
  • Rodzaj zwrotu: Określa typ danych wartości zwracanej przez funkcję.
  • Ciało: Zawiera instrukcje wykonywalne.
  • Specyfikator dostępu: Określa dostępność funkcji w aplikacji.
  • Parametry: Jest to lista argumentów, które możemy przekazać funkcji podczas wywołania.

Składnia

FunctionName () {// function body // return statement}

Przykład:

using System namespace FunctionExample {class Edureka {public string Show (string message) {Console.WriteLine ('Inside Show Function') return message} static void Main (string [] args) {Edureka program = new Edureka () string message = program .Show ('To Edureka') Console.WriteLine ('Powitanie' + wiadomość)}}}

//Wynik:

Funkcja Inside Show
Witamy w Edurece

Funkcje można wykonywać na 3 różne sposoby:

  • Zadzwoń według wartości
  • Zadzwoń przez numer referencyjny
  • Out Parameter

Zadzwoń według wartości

W C # wartość -rodzaj parametryta przepustkareplikaoryginalnej wartości dofunkcja zamiastodniesienie. Toniemodyfikowaćpierwsza wartość. Nautworzono poprawkęprzeszedłwartość nieWiekokreśloną wartość.w ramachnastępujący przykład,mamyprzechodzićwartość w całym tekściethepołączenie.

Przykład:

using System namespace CallByValue {class Edureka {public void Show (int val) {val * = val Console.WriteLine ('Wartość wewnątrz funkcji show' + val)} static void Main (string [] args) {int val = 50 Program Edureka = nowy Edureka () Console.WriteLine ('Wartość przed wywołaniem funkcji' + val) program.Show (val) Console.WriteLine ('Wartość po wywołaniu funkcji' + val)}}}

//Wynik:

Wartość przed wywołaniem funkcji 50
Wartość wewnątrz funkcji show 2500
Wartość po wywołaniu funkcji 50

Zadzwoń przez numer referencyjny

W metodzie Call by Referencedo ref słowo kluczowe, aby przekazać argument jako typ odniesienia. Przekazuje odwołanie do argumentów do funkcji, a nie kopię oryginalnej wartości. Zmiany w przekazanych wartościach są trwałe i modyfikować oryginalna wartość zmiennej.

Przykład:

using System namespace CallByReference {class Edureka {public void Show (ref int val) {val * = val Console.WriteLine ('Wartość wewnątrz funkcji show' + val)} static void Main (string [] args) {int val = 50 Edureka program = new Edureka () Console.WriteLine ('Wartość przed wywołaniem funkcji' + val) program.Show (ref val) Console.WriteLine ('Wartość po wywołaniu funkcji' + val)}}}

//Wynik:

Wartość przed wywołaniem funkcji 50
Wartość wewnątrz funkcji show 2500
Wartość po wywołaniu funkcji 2500

Out Parameter

Parametr wyjściowyzapewnia na zewnątrz słowo kluczowe do przekazywania argumentów jako typu wyjściowego. Jest podobny do typu referencyjnego, z tą różnicą, że nie wymaga zainicjowania zmiennej przed przekazaniem. Musimy użyć na zewnątrz słowo kluczowe, aby przekazać argument jako typ wyjściowy. Jest to przydatne, gdy chcemy, aby funkcja zwracała wiele wartości.

Przykład:

using System namespace OutParameter {class Edureka {public void Show (out int val) {int square = 5 val = square val * = val} static void Main (string [] args) {int val = 50 Edureka program = new Edureka () Console.WriteLine ('Wartość przed przekazaniem zmiennej' + val) program.Show (wartość wyjściowa) Console.WriteLine ('Wartość po otrzymaniu zmiennej wyjściowej' + val)}}}

//Wynik:

Wartość przed przekazaniem zmiennej 50

Wartośćpo otrzymaniu zmiennej wyjściowej 25

Przejdźmy teraz do programowania obiektowego

Programowanie obiektowe

Programowanie obiektowe Systemto paradygmat programowania oparty na koncepcji obiekty to zawiera członkowie danych i metody związanych z nimi. Podstawowym celem programowania obiektowego jest zwiększenie elastyczności i łatwości konserwacji programów

Cechy programowania obiektowego:

  • Nacisk kładzie się bardziej na dane niż na procedurę.
  • Programy są podzielone na obiekty, co ułatwia pracę.
  • Struktury danych są projektowane w taki sposób, aby charakteryzowały obiekty.
  • Funkcje, które działają nadane obiektu są umieszczane razem w strukturze danych.
  • Dane są ukryte i funkcje zewnętrzne nie mogą uzyskać do nich dostępu bez pozwolenia.
  • Komunikacja między obiektami może odbywać się za pomocą funkcji.
  • Dodawanie nowych danych i funkcji stało się łatwe.
  • W projektowaniu programów stosuje podejście oddolne.

Paradygmaty zorientowane obiektowo w języku C # są następujące

Wyliczenie w C #

Enum lub nazywany również wyliczenie w C # służy do przechowywania wartości stałych bez konieczności ich zmiany podczas całego wykonywania programu C #. Tosłuży do przechowywania zestawu nazwanych stałych, takich jak pora roku, dni, miesiąc, rozmiar itp

Przykład:

using System public class EnumExample {public enum week {poniedziałek, wtorek, środa, czwartek, piątek, sobota, niedziela} public static void Main () {int x = (int) week.Monday int y = (int) week.Friday Console .WriteLine ('Monday = {0}', x) Console.WriteLine ('Friday = {0}', y)}}

//Wynik:

Poniedziałek = 0
Piątek = 4

Podejście programowania obiektowego

Zorientowany obiektowo styl programowania można osiągnąć, postępując zgodnie z metodami opisanymi poniżej.

Kapsułkowanie

Kapsułkowanie to metoda łączenia metody wraz z ich członkowie danych.

Przykład:

using System namespace Edureka {class Rectangle {public double length public double width public double GetArea () {return length * width} public void Display () {Console.WriteLine ('Length: {0}', length) Console.WriteLine (' Width: {0} ', width) Console.WriteLine (' Area: {0} ', GetArea ())}} class ExecuteRectangle {static void Main (string [] args) {Rectangle r = new Rectangle () r.length = 50 r.width = 35 r.Display () Console.ReadLine ()}}}

//Wynik:

Długość: 50
Szerokość: 35
Powierzchnia: 1750

Abstrakcja

Abstrakcja jest metodą ukryć złożoną część dotyczącą kodowania od użytkownika poprzez dostarczanie mu tylko wymaganych informacji, których potrzebuje.

Przykład:

using System publiczna klasa abstrakcyjna Shape {public abstract void draw ()} public class Rectangle: Shape {public override void draw () {Console.WriteLine ('drawing rectangle ...')}} public class Circle: Shape {public override void draw () {Console.WriteLine ('drawing circle ...')}} public class TestAbstract {public static void Main () {Shape ss = new Rectangle () s.draw () s = new Circle () s.draw ()}}

//Wynik:

rysowanie prostokąta ...
koło rysunkowe ...

Berło

Plik berło jest całkowicie podobny do abstrakcji. Funkcjonalność interfejsu polega na ukryciu nieistotnych danych przed użytkownikiem i udostępnieniu mu jedynych ważnych danych, których potrzebuje.

Przykład:

using System public interface Drawable {void draw ()} public class Rectangle: Drawable {public void draw () {Console.WriteLine ('drawing rectangle ...')}} public class Circle: Drawable {public void draw () {Console .WriteLine ('drawing circle ...')}} public class TestInterface {public static void Main () {Drawable dd = new Rectangle () d.draw () d = new Circle () d.draw ()}}

//Wynik:

rysowanie prostokąta ...
koło rysunkowe ...

Wielopostaciowość

Wielopostaciowośćjest połączeniem „Poli” + „Przemiany” co oznacza wiele form. To greckie słowo. Oznacza to, że segment kodu może przybierać różne formy. Mamy dwa rodzaje polimorfizmu.

  • Polimorfizm czasu kompilacji
  • Polimorfizm w czasie wykonywania

Przykład:

using System public class Animal {public string color = 'white'} public class Dog: Animal {public string color = 'black'} public class TestSealed {public static void Main () {Animal d = new Dog () Console.WriteLine ( d.color)}}

//Wynik:

biały

Dziedzictwo

Przykład aplikacji mvc w java

Dziedzictwo to proces, w którym jeden obiekt automatycznie uzyskuje wszystkie właściwości i zachowania swojego obiektu nadrzędnego. Możesz ponownie używać, rozszerzać lub modyfikować atrybuty i zachowania zdefiniowane w innej klasie. wywoływana jest klasa, która dziedziczy członków innej klasy Klasy pochodnej a klasa, której członkowie są dziedziczeni, nazywa się baza klasa. Klasa pochodna jest wyspecjalizowaną klasą dla klasy bazowej.

Przykład dziedziczenia jednopoziomowego

using System namespace RectangleApplication {class Rectangle {chroniona podwójna długość chroniona podwójna szerokość public Rectangle (double l, double w) {length = l width = w} public double GetArea () {return length * width} public void Display () {Console. WriteLine ('Length: {0}', length) Console.WriteLine ('Width: {0}', width) Console.WriteLine ('Area: {0}', GetArea ())}} class Tabletop: Rectangle {private double cost public Tabletop (double l, double w): base (l, w) {} public double GetCost () {double cost cost = GetArea () * 70 return cost} public void Display () {base.Display () Console .WriteLine ('Cost: {0}', GetCost ())}} class ExecuteRectangle {static void Main (string [] args) {Tabletop t = new Tabletop (4.5, 7.5) t.Display () Console.ReadLine () }}}

//Wynik:

Długość: 4.5
Szerokość: 7,5
Powierzchnia: 33,75
Koszt: 2362,5

Przykład dziedziczenia wielopoziomowego

using System namespace InheritanceApplication {class Shape {public void setWidth (int w) {width = w} public void setHeight (int h) {height = h} protected int width protected int height} interfejs publiczny PaintCost {int getCost (int area)} class Rectangle: Shape, PaintCost {public int getArea () {return (width * height)} public int getCost (int area) {return area * 70}} class RectangleTester {static void Main (string [] args) {Rectangle Rect = new Rectangle () int area Rect.setWidth (5) Rect.setHeight (7) area = Rect.getArea () Console.WriteLine ('Total area: {0}', Rect.getArea ()) Console.WriteLine ('Total koszt farby: $ {0} ', Rect.getCost (obszar)) Console.ReadKey ()}}}

//Wynik:

Powierzchnia całkowita: 35
Całkowity koszt farby: 2450 USD

Przeciążenie

Przeciążenie to sytuacja, w której mamy dwóch lub członków zadeklarowanych przy użyciu tej samej nazwy. Przeciążanie jest również możliwe, gdy deklarujemy dwie lub więcej metod o tej samej nazwie. Sprawdźmy przykłady obu.

Przeciążanie elementów członkowskich

Przykład:

using System public class Edureka {public static int add (int a, int b) {return a + b} public static int add (int a, int b, int c) {return a + b + c}} public class TestMemberOverloading { public static void Main () {Console.WriteLine (Edureka.add (12, 23)) Console.WriteLine (Edureka.add (12, 23, 25))}}

//Wynik:

35
60

Przeciążanie metod

Przykład:

using System public class Edureka {public static int add (int a, int b) {return a + b} public static float add (float a, float b) {return a + b}} public class TestMemberOverloading {public static void Main ( ) {Console.WriteLine (Edureka.add (12, 23)) Console.WriteLine (Edureka.add (12.4f, 21.3f))}}

//Wynik:

35
33.699997

Nadrzędny

Przesłanianie to sytuacja, w której klasa potomna definiuje tę samą metodę, którą definiuje również rodzic. Zrozummy to na małym przykładzie.

Przykład:

using System public class Edureka {public virtual void eat () {Console.WriteLine ('Eating')}} public class Dog: Edureka {public override void eat () {Console.WriteLine ('Eating food')}} public class Zastępowanie {public static void Main () {Dog d = new Dog () d.eat ()}}

//Wynik:

Jedzenie

Przestrzeń nazw

Plik przestrzeń nazw jest zasadniczo używany do obsługi wielu klas obecnych w programie. Przestrzeń nazw jest dostępna na różne sposoby.

  • System. Konsola: Tutaj System staje się przestrzenią nazw
  • Aby uzyskać dostęp do klasy przestrzeni nazw, musimy użyć namespacename.classname.
  • Możemy użyć za pomocą również słowo kluczowe.

Przykład:

using System using First using Second namespace First {public class Edureka {public void sayWelcome () {Console.WriteLine ('Welcome To Edureka')}}} przestrzeń nazw Second {public class Happy_Learning {public void sayWishes () {Console.WriteLine (' Happy Learning ')}}} public class Przestrzeń nazw {public static void Main () {Edureka h1 = new Edureka () Happy_Learning w1 = new Happy_Learning () h1.sayWelcome () w1.sayWishes ()}}

//Wynik:

Witamy w Edurece
Przyjemnej nauki

Operacje na plikach

Plik operacje na plikach dostępne w C # są następujące:

Operacja Opis
BinaryReader Odczytuje pierwotne dane ze strumienia binarnego.
BinaryWriter Zapisuje dane pierwotne w formacie binarnym.
BufferedStream Tymczasowe przechowywanie strumienia bajtów.
Informator Pomaga w manipulowaniu strukturą katalogów.
DirectoryInfo Służy do wykonywania operacji na katalogach.
DriveInfo Zawiera informacje dotyczące dysków.
Plik Pomaga w manipulowaniu plikami.
Informacja o pliku Służy do wykonywania operacji na plikach.
FileStream Służy do odczytu i zapisu w dowolnej lokalizacji w pliku.
MemoryStream Służy do swobodnego dostępu do przesyłanych strumieniowo danych przechowywanych w pamięci.
Ścieżka Wykonuje operacje na informacjach o ścieżce.
StreamReader Służy do odczytywania znaków ze strumienia bajtów.
StreamWriter Służy do zapisywania znaków w strumieniu.
StringReader Służy do odczytu z bufora ciągów.
StringWriter Służy do zapisu w buforze ciągów.

FileMode

Plik FileMode to moduł wyliczający, który definiuje wiele metod otwierania plików. Składowe modułu wyliczającego FileMode są opisane w następujący sposób:

  • Dodać: Otwiera istniejący plik i umieszcza kursor na końcu pliku lub tworzy plik, jeśli plik nie istnieje.
  • Stwórz: Służy do tworzenia nowego pliku.
  • Tworzyć nowe: Ma na celu wskazanie systemowi operacyjnemu, że powinien utworzyć nowy plik.
  • Otwarty: Jest przeznaczony do otwierania istniejącego pliku.
  • OpenOrCreate: Jest przeznaczony do określenia systemu operacyjnego, w którym powinien otworzyć plik, jeśli istnieje, w przeciwnym razie powinien utworzyć nowy plik.
  • Ścięty: Truncate otwiera istniejący plik i skraca jego rozmiar do zera bajtów.

FileAccess

FileAccess Enumerator służy do uzyskiwania dostępu do konkretnego pliku. Ma następujących członków.

  • Czytać
  • pisać
  • ReadWrite

Udostępnienie pliku

Plik Udostępnienie pliku Moduł wyliczający służy do udostępniania określonego pliku. Ma następujących członków.

  • Dziedziczony: Dziedziczony umożliwia uchwytowi pliku przekazanie dziedziczenia do procesów potomnych.
  • Żaden: Żaden nie odmawia udostępnienia bieżącego pliku
  • Czytać: Odczyt umożliwia otwarcie pliku do odczytu.
  • ReadWrite: ReadWrite umożliwia otwarcie pliku do odczytu i zapisu.
  • Pisać: Zapis umożliwia otwarcie pliku do zapisu.

Wydarzenia

Zdarzenie jest ogólnie znane jako akcja generowana przez użytkownika. Może to być kliknięcie myszą, a nawet jedno naciśnięcie klawisza z klawiatury. Podobnie programy C # również mają zdarzenia. Generator zdarzenia nosi nazwę wydawca a odbiorca zdarzenia nazywa się abonent.

Wydawca

DO wydawca zawiera definicję wydarzenia i delegata. Plik delegat zdarzenia skojarzenie jest zdefiniowane w tym obiekcie. ZA wydawca class obiekt wywołuje zdarzenie i jest powiadamiany o innych obiektach.

Abonent

DO abonent akceptuje wydarzenie i udostępnia plik moduł obsługi zdarzeń. Plik delegat w klasie wydawcy wywołuje metodę / zdarzenie treser klasy abonenta.

Przykład:

using System namespace Edureka {public delegate string Del (string str) class EventBlock {event Del NewEvent public EventBlock () {this.NewEvent + = new Del (this.WelcomeUser)} public string WelcomeUser (string username) {return 'Witamy w Edureka . '+ nazwa użytkownika} static void Main (string [] args) {EventBlock obj1 = new EventBlock () string result = obj1.NewEvent (' Happy Learning ') Console.WriteLine (result)}}}

//Wynik:

Witamy w Edurece. Przyjemnej nauki

Generics

Generics to koncepcja zapewniania członkom i metodom klasy posiadaczy miejsc w Czas działania. Możemy zdefiniować typy generyczne za pomocą nawiasy. Spójrzmy na poniższe przykłady.

Typy ogólne w klasie

using System namespace Edureka {class GenericClass {public GenericClass (T msg) {Console.WriteLine (msg)}} class Program {static void Main (string [] args) {GenericClass gen = new GenericClass ('Ta wiadomość pochodzi z klasy ogólnej' ) GenericClass genI = new GenericClass (123) GenericClass getCh = new GenericClass ('E')}}}

//Wynik:

Ta wiadomość pochodzi z klasy ogólnej
123
JEST

Typy generyczne w metodzie

using System namespace Edureka {class GenericClass {public void Show (T msg) {Console.WriteLine (msg)}} class Program {static void Main (string [] args) {GenericClass genC = new GenericClass () genC.Show ('This wiadomość pochodzi z metody ogólnej ') genC.Show (321) genC.Show (' H ')}}}

//Wynik:

Ta wiadomość pochodzi z metody ogólnej
321
H.

Delegaci

Plik Delegat działa jako odniesienie do metody. Zasadniczo to jest to samo, co wskaźnik funkcji w C i C ++, ale znacznie lepsze i bezpieczne dla typów. Delegat w metoda statyczna hermetyzuje tylko metodę. Podczas gdy delegat w instancja metoda hermetyzuje zarówno metodę, jak i instancję. Najlepszym zastosowaniem delegata jest użycie jako zdarzenie.

Przykład:

using System delegate int Calculator (int n) public class Edureka {static int number = 25 public static int add (int n) {number = number + n return number} public static int mul (int n) {number = number * n return number} public static int getNumber () {zwracana liczba} public static void Main (string [] args) {Calculator c1 = new Calculator (add) Calculator c2 = new Calculator (mul) c1 (20) Console.WriteLine ('After calculator jeden delegat, nowy numer to: '+ getNumber ()) c2 (3) Console.WriteLine (' Po drugim delegacie kalkulatora nowy numer to: '+ getNumber ())}}

//Wynik:

Po jednym delegacie kalkulatora nowa liczba to: 45
Po delegacie kalkulatora dwa nowy numer to: 135

Odbicie

Odbicie jest wymagane, aby uzyskać metadane w czasie wykonywania. Odniesienie jest dostępne w System.Reflection przestrzeń nazw. Do wykonania wymagane są następujące klasy.

  • Rodzaj
  • Informacje o członku
  • ConstructorInfo
  • MethodInfo
  • FieldInfo
  • PropertyInfo
  • TypeInfo
  • EventInfo
  • Moduł
  • montaż
  • AssemblyName
  • Wskaźnik

Wpisz klasę

Klasa C # Type reprezentuje deklaracje typów dla typów klas, typów interfejsów, typów wyliczenia, typów tablic, typów wartości

Właściwości typu

Lista ważnych właściwości klas Type jest wymieniona poniżej.

własność Opis
montaż Pobiera Assembly dla tego typu.
AssemblyQualifiedName Pobiera kwalifikowaną nazwę zestawu dla tego typu.
Atrybuty Pobiera atrybuty skojarzone z typem.
BaseType Pobiera typ podstawowy lub nadrzędny.
FullName Pobiera w pełni kwalifikowaną nazwę typu.
IsAbstract służy do sprawdzania, czy typ jest abstrakcyjny.
IsArray służy do sprawdzania, czy typ to Array.
IsClass służy do sprawdzania, czy typ to Class.
IsEnum służy do sprawdzania, czy typ to Enum.
IsInterface służy do sprawdzania, czy typ to Interfejs.
IsNested służy do sprawdzania, czy typ jest zagnieżdżony.
IsPrimitive służy do sprawdzania, czy typ jest pierwotny.
IsPointer służy do sprawdzania, czy typ to Wskaźnik.
IsNotPublic służy do sprawdzania, czy typ nie jest publiczny.
IsPublic służy do sprawdzania, czy typ jest publiczny.
IsSealed służy do sprawdzania, czy typ jest zapieczętowany.
IsSerializable służy do sprawdzania, czy typ można serializować.
Typ członkowski służy do sprawdzania, czy typem jest typ pręta lub typ zagnieżdżony.
Moduł Pobiera moduł typu.
Nazwa Pobiera nazwę typu.
Przestrzeń nazw Pobiera przestrzeń nazw typu.
własność Opis
GetConstructors () Zwraca wszystkie konstruktory publiczne dla Type.
GetConstructors (BindingFlags) Zwraca wszystkie konstruktory dla Type z określonymi BindingFlags.
GetFields () Zwraca wszystkie publiczne pola dla typu.
GetFields (BindingFlags) Zwraca wszystkie publiczne konstruktory dla Type z określonymi BindingFlags.
GetMembers () Zwraca wszystkich publicznych członków typu.
GetMembers (BindingFlags) Zwraca wszystkie elementy członkowskie dla Type z określonymi BindingFlags.
GetMethods () Zwraca wszystkie metody publiczne dla Type.
GetMethods (BindingFlags) Zwraca wszystkie metody dla Type z określonym BindingFlags.
GetProperties () Zwraca wszystkie właściwości publiczne dla Type.
GetProperties (BindingFlags) Zwraca wszystkie właściwości dla Type z określonymi BindingFlags.
GetType () Pobiera bieżący Type.
GetType (ciąg) Pobiera Type dla danej nazwy.

Przykłady refleksji:

Pobierz typ

Przykład:

przy użyciu publicznej klasy systemu GetType {public static void Main () {int a = 10 Type type = a.GetType () Console.WriteLine (type)}}

//Wynik:

System.Int32

Zdobądź Assembly

Przykład:

using System using System.Reflection public class GetAssembly {public static void Main () {Type t = typeof (System.String) Console.WriteLine (t.Assembly)}}

//Wynik:

System.Private.CoreLib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 7cec85d7bea7798e

Informacje o typie druku

Przykład:

using System using System.Reflection public class PrintType {public static void Main () {Type t = typeof (System.String) Console.WriteLine (t.FullName) Console.WriteLine (t.BaseType) Console.WriteLine (t.IsClass) Console.WriteLine (t.IsEnum) Console.WriteLine (t.IsInterface)}}

//Wynik:

Prawdziwe
Fałszywy
Fałszywy

Print Constructors

Przykład:

using System using System.Reflection public class PrintConstructors {public static void Main () {Type t = typeof (System.String) Console.WriteLine ('Constructors of {0} type ...', t) ConstructorInfo [] ci = t .GetConstructors (BindingFlags.Public | BindingFlags.Instance) foreach (ConstructorInfo c in ci) {Console.WriteLine (c)}}}

//Wynik:

Konstruktorzy typu System.String ...
Void .ctor (Char [])
Void .ctor (Char [], Int32, Int32)
Void .ctor (Char *)
Void .ctor (Char *, Int32, Int32)
Void .ctor (SByte *)
Void .ctor (SByte *, Int32, Int32)
Void .ctor (SByte *, Int32, Int32, System.Text.Encoding)
Void .ctor (Char, Int32)
Void .ctor (System.ReadOnlySpan`1 [System.Char])

Metody drukowania

Przykład:

using System using System.Reflection public class PrintMethods {public static void Main () {Type t = typeof (System.String) Console.WriteLine ('Methods of {0} type ...', t) MethodInfo [] ci = t .GetMethods (BindingFlags.Public | BindingFlags.Instance) foreach (MethodInfo m in ci) {Console.WriteLine (m)}}}

//Wynik:

Metody typu System.String ...
System.String Replace (System.String, System.String)
System.String [] Split (Char, System.StringSplitOptions)
System.String [] Split (Char, Int32, System.StringSplitOptions)
System.String [] Split (Char [])
System.String [] Split (Char [], Int32)
System.String [] Split (Char [], System.StringSplitOptions)
System.String [] Split (Char [], Int32, System.StringSplitOptions)
System.String [] Split (System.String, System.StringSplitOptions)
System.String [] Split (System.String, Int32, System.StringSplitOptions)
System.String [] Split (System.String [], System.StringSplitOptions)
System.String [] Split (System.String [], Int32, System.StringSplitOptions) ......

Drukuj pola

Przykład:

using System using System.Reflection public class PrintFields {public static void Main () {Type t = typeof (System.String) Console.WriteLine ('Fields of {0} type ...', t) FieldInfo [] ci = t .GetFields (BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic) foreach (FieldInfo f in ci) {Console.WriteLine (f)}}}

//Wynik:

Pola typu System.String ...
System.String Empty

Teraz przejdźmy do zaawansowanych koncepcji programowania w języku C #

Zaawansowane koncepcje języka C #

Funkcja anonimowa

Funkcja, która nie ma określonej nazwy, jest nazywana Anonimowy Funkcje. Istnieją dwa typy funkcji anonimowych dostępnych w języku C #

  • Wyrażenia lambda
  • Metody anonimowe

Przykład:

using System namespace LambdaExpressions {class Edureka {delegate int Square (int num) static void Main (string [] args) {Square GetSquare = x => x * x int j = GetSquare (25) Console.WriteLine ('Square:' + j)}}}

//Wynik:

Kwadrat: 625

Metody anonimowe

Plik metoda anonimowa zapewnia taką samą funkcjonalność jak wyrażenie lambda, poza tym, że pozwala nam zignorować listę parametrów.

Przykład:

using System namespace AnonymousMethods {class Program {public delegate void AnonymousFun () static void Main (string [] args) {AnonymousFun fun = delegate () {Console.WriteLine ('This is anonymous function')} fun ()}}}

//Wynik:

To jest funkcja anonimowa

Wielowątkowość

Wielowątkowość to proces, w którym wiele wątków jest tworzonych i przypisywanych do różnych zadań. oszczędza to czas, wykonując wiele zadań jednocześnie. Klasa wielowątkowości jest dostępna w System.Threading przestrzeń nazw.

Przestrzeń nazw System.Threading

Plik System.Threading przestrzeń nazw zawiera klasy i interfejsy ułatwiające wielowątkowość. Udostępnia klasy do synchronizacji zasobów wątku. Poniżej znajduje się lista najczęściej używanych klas:

  • Wątek
  • Mutex
  • Regulator czasowy
  • Monitor
  • Semafor
  • ThreadLocal
  • Pula wątków
  • Lotny

Proces i wątek

Proces jest faktycznie i podanie i jest uważany za plik wagi ciężkiej składnik. Z drugiej strony wątek jest jeden moduł całej aplikacji. To jest lekki w porównaniu z procesem

Cykl życia wątku

Każdy wątek ma cykl życia. Cykl życia wątku jest zdefiniowany w klasie System.Threading.Thread. Poniżej przedstawiono etapy cyklu życia dowolnego wątku.

  • Unstarted
  • Runnable (gotowy do uruchomienia)
  • Bieganie
  • Nie można uruchomić
  • Nie żyje

Klasa Thread zawiera następujące właściwości i metody w następujący sposób.

Właściwości wątku

własność Opis
CurrentThread zwraca instancję aktualnie uruchomionego wątku.
Żyje sprawdza, czy bieżący wątek żyje, czy nie.
IsBackground Aby pobrać / ustawić wartość aktualnego wątku jest w tle lub nie.
ManagedThreadId służy do pobierania unikalnego identyfikatora aktualnie zarządzanego wątku.
Nazwa służy do pobierania lub ustawiania nazwy bieżącego wątku.
Priorytet służy do pobierania lub ustawiania priorytetu bieżącego wątku.
ThreadState służy do zwracania wartości reprezentującej stan wątku.

Metody wątku

metoda Opis
Poronienie() służy do zakończenia wątku. Podnosi ThreadAbortException.
Przerwać() służy do przerywania wątku, który jest w stanie WaitSleepJoin.
Przystąp() służy do blokowania wszystkich wątków wywołujących do momentu zakończenia tego wątku.
ResetAbort () służy do anulowania żądania przerwania dla bieżącego wątku.
Wznawianie() służy do wznowienia zawieszonego wątku. Jest przestarzały.
Sen (Int32) służy do zawieszenia bieżącego wątku na określone milisekundy.
Początek() zmienia aktualny stan wątku na Runnable.
Zawieszać() zawiesza bieżący wątek, jeśli nie jest zawieszony. Jest przestarzały.
Wydajność() jest używany do wykonania bieżącego wątku w innym wątku.

Przykład głównego wątku

using System using System.Threading public class Edureka {public static void Main (string [] args) {Thread t = Thread.CurrentThread t.Name = 'MainThread' Console.WriteLine (t.Name)}}

//Wynik:

MainThread

Obsługa wyjątków

Plik wyjątek to błąd generowany przez program w czasie wykonywania. Wykonujemy obsługę wyjątków, aby nasz program był wolny od wyjątków.

Wyjątek Opis
System.DivideByZeroException Błąd generowany przez podzielenie liczby przez zero.
System.NullReferenceException obsługuje błąd generowany przez odwołanie do obiektu null.
System.InvalidCastException obsługuje błąd generowany przez nieprawidłowe rzutowanie typu.
System.IO.IOException obsługuje błędy wejścia / wyjścia.
System.FieldAccessException Błąd spowodowany nieprawidłowym dostępem prywatnym / chronionym.

W C # używamy 4 słów kluczowych do wykonania Obsługa wyjątków:

  • próbować
  • łapać
  • wreszcie i
  • rzucać
Przykład:
using System public class EdurekExample {public static void Main (string [] args) {try {int a = 10 int b = 0 int x = a / b} catch (Exception e) {Console.WriteLine (e)} Console.WriteLine („Ta wiadomość pochodzi z bloku catch”)}}

//Wynik:

System.DivideByZeroException: próbowano podzielić przez zero.
at ExExaEdurekample.Main (String [] args) w F: C # Tutorial C # ProgramsConsoleApp1ConsoleApp1Program.cs: wiersz 10
Ta wiadomość pochodzi z bloku catch

Przykład niestandardowego wyjątku

using System public class InvalidAgeException: Exception {public InvalidAgeException (String message): base (message) {}} public class Customized {static void validate (int age) {if (age<18) { throw new InvalidAgeException('Sorry, Age is expected to be greater than 18') } } public static void Main(string[] args) { try { validate(12) } catch (InvalidAgeException e) { Console.WriteLine(e) } Console.WriteLine('Catch block is being executed now.') } } 

//Wynik:

InvalidAgeException: Przepraszamy, wiek powinien być wyższy niż 18
at Customized.validate (Int32 age) in F: C # Tutorial C # ProgramsConsoleApp1ConsoleApp1Program.cs: wiersz 18
at Customized.Main (String [] args) in F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: wiersz 23
Trwa wykonywanie bloku catch.

Na koniec przykład bloku

using System public class FinalExecption {public static void Main (string [] args) {try {int a = 10 int b = 0 int x = a / b} catch (Exception e) {Console.WriteLine (e)} w końcu {Console .WriteLine ('W końcu blok jest wykonywany')} Console.WriteLine ('Catch blok jest wykonywany')}}

//Wynik:

System.DivideByZeroException: próbowano podzielić przez zero.
at FinalExecption.Main (String [] args) w F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: wiersz 10
Na koniec wykonywany jest blok
Wykonywany jest blok przechwytywania

Sygnatura wyjątku systemu

[SerializableAttribute] [ComVisibleAttribute (true)] klasa publiczna SystemException: Exception

Konstruktory wyjątków systemowych

Budowniczy Opis
SystemException () Służy do inicjowania nowej instancji klasy SystemException.
SystemException

(SerializationInfo, StreamingContext)

Służy do inicjowania nowego wystąpienia klasy SystemException z zserializowanymi danymi.
SystemException (ciąg) Służy do inicjowania nowego wystąpienia klasy SystemException z określonym komunikatem o błędzie.
SystemException (ciąg, wyjątek) Służy do inicjowania nowego wystąpienia klasy SystemException z określonym komunikatem o błędzie i odwołaniem do wewnętrznego wyjątku, który jest przyczyną tego wyjątku.

Właściwości wyjątku systemu

własność Opis
Dane Służy do uzyskiwania kolekcji par klucz / wartość, które zawierają dodatkowe informacje zdefiniowane przez użytkownika na temat wyjątku.
HelpLink Służy do pobierania lub ustawiania łącza do pliku pomocy skojarzonego z tym wyjątkiem.
HResult Służy do pobierania lub ustawiania HRESULT, zakodowanej wartości liczbowej, która jest przypisana do określonego wyjątku.
InnerException Służy do pobierania wystąpienia wyjątku, który spowodował bieżący wyjątek.
Wiadomość Służy do uzyskania komunikatu opisującego bieżący wyjątek.
Źródło Służy do pobierania lub ustawiania nazwy aplikacji, która powoduje błąd.
Ślad stosu Służy do uzyskania ciągowej reprezentacji bezpośrednich ramek na stosie wywołań.
TargetSite Służy do pobrania metody, która zgłasza bieżący wyjątek.

Metody wyjątków systemowych

Metody Opis
Równa się (obiekt) Służy do sprawdzania, czy określony obiekt jest równy bieżącemu obiektowi, czy nie.
Sfinalizować() Służy do zwalniania zasobów i wykonywania operacji czyszczenia.
GetBaseException () Służy do uzyskania wyjątku root.
GetHashCode () Służy do pobierania kodu skrótu.
GetObjectData

(SerializationInfo, StreamingContext)

Służy do pobierania danych obiektu.
GetType () Służy do pobierania typu środowiska wykonawczego bieżącej instancji.
MemberwiseClone () Służy do tworzenia płytkiej kopii bieżącego obiektu.
ToString () Służy do tworzenia i zwracania ciągu reprezentującego bieżący wyjątek.

Przykład wyjątku systemu

using System namespace CSharpProgram {class SystemExceptionExample {static void Main (string [] args) {try {int [] arr = new int [5] arr [10] = 25} catch (SystemException e) {Console.WriteLine (e)} }}}

//Wynik:

System.IndexOutOfRangeException: Indeks wykraczał poza granice tablicy.
w CSharpProgram.SystemExceptionExample.Main (String [] args) w F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: wiersz 11

Synchronizacja

Synchronizacja może być techniką, która umożliwia tylko jednemu wątkowi dostęp do zasobu przez określony czas. Żaden alternatywny wątek nie przerwie działania, dopóki wyznaczony wątek nie zakończy swojego zadania.

W programie wielowątkowym wątki są dozwoloneaby uzyskać dostęp do dowolnego zasobu dlaokreślone wykonanieczas. Wątki współużytkują zasoby i są wykonywane asynchronicznie. Dostęp do współdzielonych zasobów (danych)może być ważnym zadaniemże ogólniemógł się zatrzymaćsystem.mamy tendencję do wywierania na to wpływupoprzez tworzenie wątków w sposób synchroniczny.

Przykład bez synchronizacji

using System using System.Threading class Edureka {public void PrintTable () {for (int i = 1 i<= 10 i++) { Thread.Sleep(100) Console.WriteLine(i) } } } class Program { public static void Main(string[] args) { Edureka p = new Edureka() Thread t1 = new Thread(new ThreadStart(p.PrintTable)) Thread t2 = new Thread(new ThreadStart(p.PrintTable)) t1.Start() t2.Start() } } 

//Wynik:

jeden
jeden
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10

Przykład z synchronizacją

using System using System.Threading class Edureka {public void PrintTable () {lock (this) {for (int i = 1 i<= 10 i++) { Thread.Sleep(100) Console.WriteLine(i) } } } } class Program { public static void Main(string[] args) { Edureka p = new Edureka() Thread t1 = new Thread(new ThreadStart(p.PrintTable)) Thread t2 = new Thread(new ThreadStart(p.PrintTable)) t1.Start() t2.Start() } } 

//Wynik:

jeden
2
3
4
5
6
7
8
9
10
jeden
2
3
4
5
6
7
8
9
10

Nowe funkcje

Firma Microsoft dodała wiele najnowszych funkcji do języka C #, niektóre z nich są wymienione poniżej.

C # 6.0

  • Korzystanie z dyrektywy statycznej
  • Filtry wyjątków
  • Oczekuj w blokach catch / final
  • Inicjatory właściwości automatycznych
  • Domyślne wartości właściwości tylko pobierających
  • Członkowie o cielesnej ekspresji
  • Zerowy propagator
  • Interpolacja ciągów
  • Nazwa operatora
  • Inicjator słownika
  • Kompilator jako usługa (Roslyn)

C # 7.0

  • Dopasowanie wzorców
  • Krotki
  • Dekonstrukcja
  • Funkcje lokalne
  • Separator cyfr
  • Literały binarne
  • Ref. Zwrotów i miejscowych
  • Konstruktory i finalizatory z treścią wyrażeń
  • Metody pobierające i ustawiające z wyrażeniem
  • Zmienne wyjściowe
  • Uogólnione typy zwrotów asynchronicznych

C # 7.1

  • Async main
  • Wyrażenia domyślne

Pytania do wywiadów oparte na C #

Ważny wywiad Pytania oparte na języku programowania C # można znaleźć w tym zaktualizowanym dokumencie .

Tym samym dochodzimy do końca tego artykułu „Samouczek języka C #”. Mam nadzieję, że zrozumiałeś znaczenie struktur danych, składni, funkcjonalności i operacji wykonywanych przy ich użyciu. Teraz, gdy zrozumiałeś podstawy programowania w C # dzięki temuSamouczek języka C #, Sprawdź zapewnione szkolenie firmy Edureka w wielu technologiach, takich jak Java, Wiosna i wielemore, zaufana firma zajmująca się edukacją online z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie otrzymała pytanie do nas? Wspomnij o tym w sekcji komentarzy tego bloga „C # Tutorial”, a skontaktujemy się z Tobą tak szybko, jak to możliwe.