C # è per tutti gli usi e il robusto linguaggio di programmazione sviluppato da Microsoft Corporation nel 2000 come un concorrente mortale di Java. È il linguaggio di programmazione più popolare e dominante quando si tratta sia di sviluppo web che di sviluppo di applicazioni desktop.
In questo tutorial di C # impareremo i concetti seguenti.
- Nozioni di base su C #
- Programmazione orientata agli oggetti
- Concetti avanzati di C #
- Domande di intervista basate su C #
Nozioni di base su C #
- Introduzione al linguaggio di programmazione C #
- Funzionalità del linguaggio di programmazione C #
- Installazione
- Struttura del programma C #
- Tipi di dati
- Variabili
- Operatori
- Loop
- Condizionale
- stringhe
- Array
- Collezioni
- Struttura
- Funzioni
Introduzione al linguaggio di programmazione C #
All'inizio degli anni '90, Java era il principale linguaggio di programmazione per lo sviluppo web, lo sviluppo di applicazioni desktop e molti altri campi. Microsoft voleva trovare un concorrente con molte funzionalità avanzate in grado di lasciare Java molto indietro.
Era l'anno 2000, Anders Hejlsberg e il suo team Microsoft ha avuto l'idea di C # popolarmente chiamato C-Sharp. Questa iniziativa è stata approvata dall'International Standards Organization (MAGGIORE) e la European Computer Manufacturers Association (ECMA). e infine, The C # entra nel mondo dello sviluppo del software.
Funzionalità del linguaggio di programmazione C #
- Linguaggio di programmazione orientato agli oggetti
L'approccio alla programmazione orientata agli oggetti è ciò che rende C # sharp il linguaggio di programmazione più intuitivo e facile da sviluppare e mantenere.
- Lingua indipendente dai tipi
Il significato di Type-Safe è che il compilatore avrà accesso solo alla posizione di memoria che ha il permesso di eseguire. Questa funzione migliora la sicurezza del codice a un livello esponenziale.
- Interoperabilità
La funzionalità di interoperabilità rende C # sufficientemente capace per fare tutto ciò che è nativo di C ++ in un modo più efficiente che può superare lo stesso C ++.
- Ricca libreria
C # fornisce l'accesso a più numeri di librerie incorporate che forniscono funzionalità preprogrammate per ridurre il tempo impiegato nel processo di sviluppo.
- Scalabile e aggiornabile
C # è stato progettato per essere superiore rispetto agli altri linguaggi di programmazione. Quindi, è sempre aperto agli aggiornamenti e si mantiene altamente scalabile con le sue funzionalità.
- Orientato ai componenti
Gli sviluppatori di Microsoft hanno utilizzato l'approccio basato sui componenti per sviluppare C #. Questa è la metodologia di sviluppo più predominante per mantenere C # altamente scalabile e aggiornato.
- Linguaggio strutturato
L'approccio di programmazione strutturata è preferito durante il ciclo di vita dello sviluppo del software poiché diventa facile sviluppare, compilare e distribuire il software rispetto all'approccio di programmazione orientato alla procedura.
- Veloce
La programmazione C # risulta essere più veloce nella compilazione e nell'esecuzione rispetto a C ++ e altri linguaggi di programmazione.
Installazione
È dimostrato che Microsoft Visual Studio è il miglior editor della classe per la programmazione C #. Installeremo e configureremo Microsoft Visual Studio per l'esecuzione dei nostri programmi C # seguendo i passaggi indicati di seguito:
Passo 1 : Scarica Microsoft Visual Studio
Google per il ultima versione di Visual Studio e scarica il file installare file nel tuo sistema locale e poi correre il file di installazione come un amministratore.
Passaggio 2: selezionare il pacchetto di sviluppo desktop .NET
Una volta eseguito il programma di installazione, l'editor di Visual Studio verrà scaricato correttamente nel sistema locale, in seguito verrà visualizzata una finestra di dialogo sullo schermo del desktop che chiede al nemico un pacchetto particolare di cui hai bisogno nel tuo sistema. Qui devi selezionare il file Sviluppo desktop .NET pacchetto.
Passaggio 3: impostare l'ambiente C #
Una volta che i tuoi pacchetti per Sviluppo .NET vengono scaricati, quindi sullo schermo verrà visualizzata un'altra finestra di dialogo che richiede l'ambiente di sviluppo che stai cercando. Qui, devi selezionare l'ambiente per C #.
Passaggio 4: crea il tuo primo progetto
Una volta che l'ambiente è impostato, siete tutti a posto. Avvia Visual Studio e seleziona creare un nuovo progetto opzione nella finestra di dialogo visualizzata.
Verrai reindirizzato alla finestra di dialogo successiva e lì dovrai selezionare Libreria di classi come .NET Standard come mostrato di seguito.
Nella finestra di dialogo successiva, ti verrà chiesto di farlo Configura il tuo progetto . Configuralo e ora sei nell'Editor. Scrivi il tuo primo programma e correre esso. L'output verrà visualizzato correttamente sul file Prompt dei comandi.
using System class Edureka {static void Main (string [] args) {Console.WriteLine ('Welcome to Edureka !, Happy Learning ..!')}}
//Produzione:
è git e github lo stesso
Eseguiamo il nostro primo programma C #.
Struttura del programma C #
Ora che abbiamo eseguito il nostro primo programma C #, comprendiamo in dettaglio la sua struttura. Un semplice programma C # ha le seguenti parti.
using System namespace ConsoleApplication1 {public class Edureka {public static void Main (string [] args) {Console.WriteLine ('Welcome to Edureka !, Happy Learning ..!')}}}
//Produzione:
Benvenuto in Edureka !, Buon apprendimento ..!
- classe: class può essere generalmente definita come a parola chiave che viene utilizzato per definire una classe nel programma C #.
- Edureka: È il nome del file Classe. La classe è spesso considerata come un progetto che memorizza i membri ei metodi relativi alla classe.
- Principale: Fondamentalmente è il file metodo primario dell'intero programma C #, funge da gateway per il controllo per entrare nel programma. Viene eseguito prima di eseguire qualsiasi altro metodo del programma.
- void: Questo segmento del codice è designato per il tipo restituito del metodo. Può essere qualsiasi tipo di dati diverso da void. Void significa che il metodo non ha dati da restituire.
- statico: Questo è un parola chiave che dice che i membri di dati dichiarati sono statici e una memoria dedicata è stata allocata ai membri dichiarati.
- String [] args: Assomiglia agli argomenti della riga di comando che usiamo nel nostro programma. Mentre eseguiamo il nostro programma, sostanzialmente ne passiamo alcuni argomenti, che sarà accettato dal programma a causa di questa dichiarazione.
- System.Console.WriteLine ('Benvenuto in Edureka !, Buon apprendimento ..!') Qui, Sistema è il spazio dei nomi. La consoleè questa la categoria delineatanello spazio dei nomi di sistema. Il Linea di scrittura() è che ilstaticotecnicadi Consolecategoria utilizzata per la svalutazioneil testo sulla console.
Ora impariamo i tipi di dati disponibili in C #.
Tipi di dati
I tipi di dati in C # sono suddivisi in tre categorie descritte di seguito.
Tipi di dati valore
Il Tipi di dati valore si trovano in System.ValueType Library e sono sempre pronti per essere acceduti direttamente e le variabili possono essere assegnate direttamente a un particolare valore. I tipi di dati valore sono ulteriormente classificati in due tipi come mostrato di seguito:
- Tipi di dati predefiniti
- Tipi di dati definiti dall'utente
Tipi di dati predefiniti: Questi sono quelli che normalmente usiamo nella nostra programmazione quotidiana. Questi tipi di dati sono predefiniti dagli sviluppatori del linguaggio e sono pronti per l'uso per i programmatori.
Esempio:
int, float, char, short double, ecc
Tipi di dati definiti dall'utente: Ci sono situazioni in cui potremmo aver bisogno di memorizzare valori diversi da Datatypes in una singola variabile. In questi casi, il Tipi di dati predefiniti non sono sufficienti. Definito dall'utente I tipi di dati sono come i tipi di dati personalizzabili per l'utente.
Esempio: Structure, Enum
Tipo di dati | Intervallo di memoria allocata | Dimensione della memoria |
firmato char | Da -128 a 127 | 1 byte |
carattere non firmato | Da 0 a 127 | 1 byte |
char | Da -128 a 127 | 1 byte |
firmato a breve | Da -32.768 a 32.767 | 2 byte |
corto non firmato | Da 0 a 65.535 | 2 byte |
corto | Da -32.768 a 32.767 | 2 byte |
firmato int | Da -2.147.483.648 a -2.147.483.647 | 4 byte |
unsigned int | Da 0 a 4.294.967.295 | 4 byte |
int | Da -2.147.483.648 a -2.147.483.647 | 4 byte |
firmato a lungo | -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 | 8 byte |
non firmato a lungo | Da 0 a 18.446.744.073.709.551.615 | 8 byte |
lungo | -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 | 8 byte |
galleggiante | 1.5 * 10-45 - 3.4 * 1038, (precisione a 7 cifre) | 4 byte |
Doppio | 5,0 * 10-324 - 1,7 * 10308, (precisione a 15 cifre) | 8 byte |
decimale | -7,9 * 10-28 - 7,9 * 1028, (precisione a 28 cifre) | 16 byte |
Tipo di dati puntatore
Il tipo di puntatore è un semplice tipo di dati. La sua funzionalità è completamente simile ai puntatori in C. Sono progettati per memorizzare l'indirizzo di un altro puntatore.
float * ptr
Tipi di dati di riferimento
Il nome si spiega da sé. Il Tipi di dati di riferimento in realtà non memorizzano le variabili, invece memorizzano il valore di riferimento a quella particolare variabile. In altre parole, memorizzano l'indirizzo della variabile effettiva.
Le variabili di riferimento sono classificate in tre diversi tipi come indicato di seguito:
- Tipo di oggetto
Il tipo di dati oggetto è disponibile in System.Object Classe.L'oggettotipipuò essereassegnato alvalori digli altri tipi,riferimentotipi, predefinito, definito dall'utentetipi. Ma primaIncaricovalori, richiede genere conversione.
object abc abc = 50 // questo si chiama boxe
- Tipo dinamico
Le variabili di tipo dinamico sono progettate per memorizzare quasi tutti i tipi di valori. Viene chiamato tipo dinamico perché il controllo del tipo dei valori avviene in fase di esecuzione
dinamico x = 10
- Tipo di stringa
Il tipo di stringa è disponibile in System.String classe. Il tipo di stringa è progettato per memorizzare i valori letterali di stringa. Le stringhe letterali sono archiviate in due forme indue forme
- citato
- @quoted.
Stringa S = 'Edureka'
- Il @quoted la stringa letterale sembra
@ 'Edureka'
Adesso capiamo le variabili.
Variabili
Le variabili sono i nomi assegnati alla posizione di memoria che memorizzano determinati dati forniti dall'utente e tali dati sono facilmente accessibili utilizzando il nome della variabile. Sono disponibili cinque tipi di variabili in C #
genere | Esempio |
Nullo | Dati nulli |
Booleano | Vero e falso |
Numero intero | Int, Char, Byte, Short, Long |
Galleggiante | Galleggiante e doppio |
Decimale | Decimale |
Esempio:
int a, b double x float p char abc
Regole da seguire per dichiarare le variabili in C #
- Una variabile può includere alfabeti, cifre e trattini bassi.
- Il nome di una variabile può iniziare solo con un alfabeto o un trattino basso.
- Le variabili non possono iniziare con una cifra o un carattere speciale.
- Non sono consentiti spazi bianchi tra il nome della variabile.
- Le parole chiave riservate non possono essere utilizzate come nomi di variabili.
Operatori
Un operatore può essere definito come un simbolo speciale che spiega al computer di eseguire una particolare operazione matematica su un insieme di variabili. C # include una varietà di operatori menzionati di seguito.
- Operatori aritmetici
- Operatori relazionali
- Operatori logici
- Operatori bit per bit
- Operatori di assegnazione
Operatori aritmetici
Operatore | Esempio | Descrizione |
+ | A + B | Aggiunge due operandi |
- | A - B | Sottrae due operandi |
* | A * B | Moltiplica due operandi |
/ | A / B | Divide due operandi |
% | A% B | Il resto di due operandi |
++ | A ++ | Operazione di incremento |
- | PER- | Operazione di decremento |
Operatori relazionali
Operatore | Esempio | Descrizione |
== | A == B | Vero, se entrambi gli operandi sono uguali, Else False |
! = | A! = B | Vero, se entrambi gli operandi non sono uguali, Else False |
> | A> B | Vero, se A è maggiore, Else False |
< | PER | Vero, se B è maggiore, Else False |
> = | A> = B | Vero, se A è maggiore o uguale, Else False |
<= | PER<= B | Vero, id B è maggiore uguale, Else False |
Operatori logici
Operatore | Esempio | Descrizione |
&& | A && B | Vero, se entrambi gli operandi sono veri, Else False |
|| | A || B | Vero, se uno degli operandi è vero, Else False |
! | A! B | Inverte lo stato logico dell'operando |
Operatori bit per bit
PER | B | A & B | A | B | A ^ B |
uno | uno | uno | uno | 0 |
uno | 0 | 0 | uno | uno |
0 | uno | 0 | uno | uno |
0 | 0 | 0 | 0 | 0 |
Operatore | Esempio | Descrizione |
~ | (~ A) | L'operatore di complemento di Binary One è unario e ha l'effetto di 'ribaltare' i bit. |
<< | PER<<2 | Operatore binario di spostamento sinistro. Il valore degli operandi di sinistra viene spostato a sinistra del numero di bit specificato dall'operando di destra. |
>> | A >> 2 | Operatore binario di spostamento a destra. Il valore dell'operando di sinistra viene spostato a destra del numero di bit specificato dall'operando di destra. |
Operatori di assegnazione
Operatore | Esempio | Descrizione |
= | A = B + C | A = B + C, B + C è assegnato ad A |
+ = | A + = B | A = A + B, A + B è assegnato ad A |
- = | A - = B | A = A-B, A-B è assegnato ad A |
* = | A - = B | A = A * B, A * B è assegnato ad A |
/ = | A / = B | A = A / B, A / B è assegnato ad A |
% = | A% = B | A = A% B, A% B è assegnato ad A |
<<= | PER<<= 2 | Operatore di spostamento a sinistra e assegnazione |
>> = | A >> = 2 | Operatore di spostamento a destra e assegnazione |
& = | A & = 2 | Bitwise e operatore di assegnazione |
^ = | A ^ = 2 | Operatore esclusivo e di assegnazione bit per bit |
| = | A! = 2 | Operatore inclusivo e di assegnazione bit per bit |
Loop
PER ciclo continuo L'istruzione viene utilizzata per eseguire ripetutamente un blocco di istruzioni fino a quando non viene soddisfatta una particolare condizione. Il linguaggio C # è costituito dalle seguenti istruzioni di ciclo.
- Per Loop
- While Loop
- Fai mentre loop
Per Loop
Il per loop viene utilizzato per eseguire un particolare segmento di codice per più volte fino a quando la condizione data è soddisfatta.
Sintassi
per (incremento / decremento condizione di inizializzazione) {// segmento di codice}
Diagramma di flusso:
Esempio:
utilizzando System public class ForExample {public static void Main (string [] args) {for (int i = 1 i<= 5 i++) { Console.WriteLine(i) } } }
//Produzione:
uno
2
3
4
5
While Loop
Il While loop viene utilizzato per eseguire un segmento di codice per più volte fino a quando non viene soddisfatta una condizione specifica.
Sintassi
while (condizione) {// codice da eseguire}
Diagramma di flusso:
Esempio:
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() } } }
//Produzione:
Il valore di a: 5
Il valore di a: 6
Il valore di a: 7
Il valore di a: 8
Il valore di a: 9
Il valore di a: 10
Fai mentre loop
Il ciclo Do while è completamente simile al ciclo While, ma l'unica differenza è che la condizione è posta alla fine del ciclo. Quindi, il ciclo viene eseguito almeno una volta.
Sintassi
do {// codice da eseguire} while (condizione)
Diagramma di flusso:
Esempio:
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, prodotto) i ++} while (i<= 10) } } }
//Produzione:
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
Condizionale
Dichiarazioni condizionali vengono utilizzati per eseguire dichiarazione o un gruppo di dichiarazioni basato su alcune condizioni. Se la condizione è vero allora Istruzioni C # vengono eseguiti altrimenti il successivo dichiarazione sarà eseguito.
I diversi tipi di istruzioni condizionali nel linguaggio C ++ sono i seguenti:
- If dichiarazione
- Istruzione If-Else
- Istruzione If-else annidata
- If-Else If ladder
- Istruzione Switch
If dichiarazione
Il singolo Se L'istruzione in linguaggio C # viene utilizzata per eseguire il codice se una condizione è vera. Viene anche chiamata dichiarazione di selezione unidirezionale.
Sintassi
if (espressione-booleana) {// istruzioni eseguite se l'espressione-booleana è vera}
Diagramma di flusso:
Esempio:
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.') } } }
//Produzione:
2 è minore di 5
Questa istruzione viene sempre eseguita.
Istruzione If-Else
Il se altro L'istruzione in linguaggio C viene utilizzata per eseguire il codice se la condizione è vera o falsa. Viene anche chiamata dichiarazione di selezione a due vie.
Sintassi
if (espressione-booleana) {// istruzioni eseguite se l'espressione-booleana è vera} else {// istruzioni eseguite se l'espressione-booleana è falsa}
Diagramma di flusso:
Esempio:
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.') } } }
//Produzione:
12 è maggiore o uguale a 5
Questa istruzione viene sempre eseguita.
Istruzione If-else annidata
Il nidificato se altro viene utilizzata quando un programma richiede più di un'espressione di prova. Viene anche chiamata istruzione di selezione a più vie. Quando una serie di decisioni sono coinvolte in una dichiarazione, usiamo se altro dichiarazione in forma annidata.
Sintassi
if (espressione-booleana) {if (espressione-nidificata-1) {// codice da eseguire} else {// codice da eseguire}} else {if (espressione-nidificata-2) {// codice da eseguire } altro {// codice da eseguire}}
Diagramma di flusso:
Esempio:
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//Produzione:
13 è il più grande
Else-if Ladder
Il se-altrimenti-se viene utilizzata per eseguire un codice da più condizioni. È anche chiamato dichiarazione di decisione multipath. È una catena di istruzioni if..else in cui ogni istruzione if è associata a un'istruzione else if e last sarebbe un'istruzione else.
Sintassi
if (condizione1) {// codice da eseguire se condizione1 è vera} else if (condizione2) {// codice da eseguire se condizione2 è vera} else if (condizione3) {// codice da eseguire se condizione3 è vera} ... altro {// codice da eseguire se tutte le condizioni sono false}Diagramma di flusso:
Esempio:
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 è 15 ') else if (i == 20) Console.WriteLine (' i is 20 ') else Console.WriteLine (' i is not present ')}}//Produzione:
ho 20 anni
Istruzione Switch
Interruttore L'istruzione funge da sostituto per un lungo ladder if-else-if utilizzato per testare un elenco di casi. Un'istruzione switch contiene una o più etichette case che vengono verificate rispetto all'espressione switch. Quando l'espressione corrisponde a un caso, verranno eseguite le istruzioni associate a quel caso.
Sintassi
switch (variabile / espressione) {case value1: // Dichiarazioni eseguite se espressione (o variabile) = valore1 break case value2: // Dichiarazioni eseguite se espressione (o variabile) = valore1 break ... ... ... .. . ... ... default: // Istruzioni eseguite se nessun caso corrisponde}Diagramma di flusso:
Esempio:
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') break case 'u': Console.WriteLine ('Vowel') break default: Console.WriteLine ('Not a vowel') break}}}}//Produzione:
Inserisci un alfabeto
e
Vocale
stringhe
Corda Datatype è un membro di System.String Classe. È in grado di memorizzare il tipo di carattere dei dati. Possiamo eseguire varie operazioni su Stings comeconcatenazione, confronto, acquisizione di sottostringhe, ricerca, taglio, sostituzione e molti altri.
L'analogia di String e string
In C # Corda e corda sono equivalenti. La stringa della parola è un parola chiave e funge da System.String classe. Possiamo usare una delle versioni per dichiarare le stringhe.
Sintassi:
string s1 = 'Edureka' // creazione di una stringa utilizzando la parola chiave stringa String s2 = 'Happy Learning' // creazione di una stringa utilizzando la classe StringEsempio:
utilizzando 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 '} stringa s2 = nuova stringa (ch) Console.WriteLine ( s1) Console.WriteLine (s2)}}//Produzione:
Edureka
Esercitazione su Csharp
Metodi di stringa in C #
Metodo Descrizione Clone() Utilizzato per restituire un riferimento a questa istanza di String. Confronta (stringa, stringa) Utilizzato per confrontare due oggetti String specificati. Concat (stringa, stringa) Concatena due istanze specificate di String. Contiene (String) Restituisce un valore che indica una sottostringa specificata Copia (stringa) Utilizzato per creare una nuova istanza di String con lo stesso valore CopyTo (Int, Char [], Int, Int) Copia i caratteri da una posizione specificata Equals (String, String) Determina che due oggetti String hanno lo stesso valore. Formato (stringa, oggetto) Sostituisci uno o più elementi di formato in una stringa specificata IndexOf (stringa) Riporta l'indice in base zero della prima occorrenza Inserisci (Int32, stringa) Restituisce una nuova stringa in cui viene inserita una stringa in corrispondenza di un indice. IsInterned (String) Indica che questa stringa è nella forma di normalizzazione Unicode C. IsNullOrEmpty (stringa) Indica che la stringa specificata è null o una stringa vuota. IsNullOrWhiteSpace (String) Utilizzato per indicare se una stringa specificata è nulla, vuota, Join (String, String []) Utilizzato per concatenare tutti gli elementi di una matrice di stringhe LastIndexOf (Char) Riporta la posizione dell'indice in base zero dell'ultimo carattere LastIndexOfAny (Char []) Riporta la posizione dell'indice in base zero dell'ultimo carattere Rimuovi (Int32) Restituisce una nuova stringa in cui tutti i caratteri Sostituisci (stringa, stringa) Restituisce una nuova stringa in cui tutte le occorrenze di una stringa Dividi (carattere []) Viene utilizzato per dividere una stringa in sottostringhe StartsWith (String) Viene utilizzato per verificare se l'inizio di questa stringa Sottostringa (Int32) Viene utilizzato per recuperare una sottostringa da questa istanza. ToCharArray () Copia i caratteri in questa istanza in una matrice Unicode. Accordare() Viene utilizzato per restituire l'istanza di String. Taglia () Taglia la corda
ArraySimile ad altri linguaggi di programmazione, C # ha array. Gli array sono le semplici strutture di dati progettate per memorizzare lo stesso tipo di dati di elementi in una posizione di memoria contigua.
C # supporta i seguenti tipi di array.
- Array unidimensionale
- Array multidimensionale
- Array frastagliato
Array unidimensionale
Single Dimensional Array memorizza gli elementi sotto forma di una singola riga.
Sintassi
int [] arr = new int [5] // creazione dell'arrayEsempio:
utilizzando 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 per (int i = 0 i//Produzione:
10
venti
30
40
cinquanta
Array multidimensionale
Multidimensional Array memorizza elementi sotto forma di più dimensioni come una matrice e un cubo, ecc.
Sintassi
int val = a [2,3]Esempio:
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() } } }//Produzione:
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
Array frastagliato
Jagged Array è semplicemente un array di array.
Esempio:
using System namespace ArrayApplication {class MyArray {static void Main (string [] args) {int [] [] a = new int [] [] {new int [] {0,0}, new int [] {1,2 }, new int [] {2,4}, new int [] {3, 6}, new 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() } } }//Produzione:
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
Collezioni
La raccolta può essere semplicemente considerata come un gruppo di oggetti raccolti insieme in modo da applicare alcune funzioni ai dati raccolti. Le operazioni che una volta possono essere eseguite su una raccolta sono,
- negozio oggetto
- oggetto di aggiornamento
- elimina oggetto
- recuperare l'oggetto
- oggetto di ricerca e
- ordina oggetto
Tipi di raccolte
Ci sono tre diverse possibilità per lavorare con le collezioni. I tre spazi dei nomi sono menzionati di seguito:
- System.Collections.Generic classi
- System.Collections classi
- System.Collections.Concurrent classi
La classe System.Collections.Generic ha le seguenti varietà di classi:
- Elenco
- Pila
- Coda
- Lista collegata
- HashSet
- SortedSet
- Dizionario
- SortedDictionary
- SortedList
Il System.Collections le classi sono considerate classi legacy. includono le seguenti classi.
- Lista di array
- Pila
- Coda
- Hashtable
Il System.Collections.Concurrent classilo spazio dei nomi fornisce classi per operazioni thread-safe. Ora più thread non creeranno problemi per l'accesso agli elementi della raccolta. le classi disponibili in questo sono,
- BlockingCollection
- ConcurrentBag
- ConcurrentStack
- ConcurrentQueue
- ConcurrentDictionary
- Partizioni
- Partizioni
- OrderablePartitioner
Elenco
Il elenco è considerato come una struttura dati disponibile in System.Collection.Generics spazio dei nomi. Può memorizzare e recuperare elementi. L'elenco è in grado di memorizzare elementi duplicati.
Esempio:
using System using System.Collections.Generic public class 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)}}}//Produzione:
Sandhya
Arun
Prashanth
Kiran
Set di hash
C # HashSetla categoria è spesso abituatanegozio,porta viaoleggere i componenti. Itnon lo famemorizzare duplicatocomponenti.è sollecitatousare HashSet categoriaSehaiimmagazzinaresolo distintivo componenti . suo si trova nello spazio dei nomi System.Collections.Generic.
Esempio:
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') nomi. Aggiungi ('Imran') nomi. Aggiungi ('karan') per (var name in names) {Console.WriteLine (name)}}}//Produzione:
Sunil
Amar
Pujari
Imran
karan
Set ordinato
SortedSet in C #classe sono spesso abituatinegozio, rimuovere o leggere elementi . Mantiene l'ordine crescente enon lo famemorizzare duplicatoelementi.è veloceutilizzare SortedSetcategoriaSehaiimmagazzinare distintivo componenti e mantenere l'ordine crescente.suosi trova nello spazio dei nomi System.Collections.Generic.
Esempio:
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') nomi. Aggiungi ('Ravi') nomi. Aggiungi ('Kajol') per (var name in names) {Console.WriteLine (name)}}}//Produzione:
Anuradha
Kajol
Praveen
Ravi
Sanjay
Pila
Il pila è una semplice raccolta che segue BORDO o first in last out durante l'elaborazione degli elementi in esso memorizzati.
Esempio:
using System using System.Collections.Generic public class 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 ())}}//Produzione:
kumar
Rajesh
James
Pooja
Chandan
Elemento sbirciatina: kumar
Pop: kumar
Dopo Pop, elemento Peek: Rajesh
Coda
La coda è completamente simile a Stack ma l'unica differenza è che la coda segue FIFO o il principio first in e first out durante l'elaborazione degli elementi in esso memorizzati.
Esempio:
using System using System.Collections.Generic public class 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 ())}}//Produzione:
Srujan
Prajat
John
Feroce
Giorno
Elemento sbirciatina: Srujan
Dequeue: Srujan
Dopo Dequeue, elemento Peek: Prajat
Lista collegata
L'elenco collegato è una raccolta di memoria dinamica. Gli elementi nell'elenco Collegato vengono memorizzati accedendo alla memoria dall'heap e archiviando gli elementi in un ordine continuo collegando i loro indirizzi.
Esempio:
using System using System.Collections.Generic public class Edureka {public static void Main (string [] args) {var names = new LinkedList () names.AddLast ('Rajat') names.AddLast ('Arun') names.AddLast ( 'Prakash') nomi.AddLast ('jay') nomi.AddFirst ('sai') foreach (var name in names) {Console.WriteLine (name)}}}//Produzione:
sai
Bounds
Arun
Prakash
Jay
Dizionario
Dizionario categoriausa ilideadella tabella hash. Memorizza i valori sula premessadella chiave. Contienedistintivochiavisolo. Dil'assistenzadi chiave,lo faremo semplicementecerca otogliere elementi.suosi trova nello spazio dei nomi System.Collections.Generic.
Esempio:
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', Nomi 'Prasad') Aggiungi nomi ('3', 'Preetam') Aggiungi nomi ('4', 'Roy') Aggiungi ('5', 'Akash') per ogni (KeyValuePair kv nei nomi) {Console. WriteLine (kv.Key + '' + kv.Value)}}}//Produzione:
1 Shiva
2 Prasad
3 Preetam
4 Roy
5
Akash
Dizionario ordinato
Il SortedDictionary categoriausa ildesigndella tabella hash. Memorizza i valori sul'ideadella chiave. Contienedistintivochiavi e mantiene l'ordine crescentel'ideadella chiave. Dil'assistenzadi chiave,lo faremo semplicementecerca otogliere elementi.suosi trova nello spazio dei nomi System.Collections.Generic.
Esempio:
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', Nomi 'Vishal') Aggiungi nomi ('5', 'Ramesh') Aggiungi nomi ('3', 'Vidya') Aggiungi ('2', 'Pallavi') foreach (KeyValuePair kv in names) {Console. WriteLine (kv.Key + '' + kv.Value)}}}//Produzione:
1 Shiva
2 Prasad
3 Preetam
4 Roy
5Akash
Elenco ordinato
Il SortedList èunmatrice di coppie chiave / valore. Memorizza i valori sula premessadella chiave. Il SortedListcategoriacontienedistintivochiavi e mantiene l'ordine crescentela premessadella chiave. Dil'assistenzadi chiave,siamo in grado di farlo semplicementecerca o rimuovielementi.suotrovato in System.Collections.Generic spazio dei nomi.
Esempio:
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', Nomi 'Vishal') Aggiungi nomi ('5', 'Ramesh') Aggiungi nomi ('3', 'Vidya') Aggiungi ('2', 'Pallavi') foreach (KeyValuePair kv in names) {Console. WriteLine (kv.Key + '' + kv.Value)}}}//Produzione:
1 Arun
2 Pallavi
3 Vidya
4 Vishal
5Ramesh
Struttura
La struttura è un tipo di dati definito dall'utente progettato per memorizzare più elementi del diverso tipo di dati. La struttura viene dichiarata utilizzando la parola chiave struct.
Esempio:
come fare tabelle nidificate in htmlusing System struct Books {public string title public string author public string subject public int book_id} public class Edureka {public static void Main (string [] args) {Books Book1 Books Book2 Book1.title = 'Programmazione C #' Book1.author = ' Ramchandra Kumar 'Book1.subject =' Tutorial di programmazione C ++ 'Book1.book_id = 95908978 Book2.title =' Fatturazione per telecomunicazioni 'Book2.author =' Karan 'Book2.subject =' Tutorial sulla fatturazione per telecomunicazioni '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 ()}}//Produzione:
Titolo libro 1: programmazione C #
Libro 1 Autore: Ramchandra Kumar
Soggetto libro 1: Tutorial di programmazione C ++
Libro 1 book_id: 95908978
Titolo libro 2: Fatturazione delle telecomunicazioni
Libro 2 Autore: Karan
Libro 2 oggetto: Tutorial sulla fatturazione delle telecomunicazioni
Libro 2 book_id: 18674900
Funzioni
La funzione è definita come un blocco di codice del codice principale. La funzione viene utilizzata per eseguire le istruzioni specificate nel blocco di codice. Una funzione è costituita dai seguenti componenti.
- Nome funzione: È un nome distintivo utilizzato per effettuare una chiamata di funzione.
- Tipo di ritorno: Specifica il tipo di dati del valore restituito dalla funzione.
- Corpo: Contiene istruzioni eseguibili.
- Identificatore di accesso: Specifica l'accessibilità delle funzioni nell'applicazione.
- Parametri: È un elenco di argomenti che possiamo passare alla funzione durante la chiamata.
Sintassi
FunctionName () {// function body // return statement}Esempio:
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 ('Welcome' + message)}}}//Produzione:
Funzione Inside Show
Benvenuto in Edureka
Le funzioni possono essere eseguite in 3 modi diversi:
- Chiama per valore
- Chiama per riferimento
- Parametro di uscita
Chiama per valore
In C #, valore -genere parametrisiamoquel passaggiouna replicadi valore originale alfunzione invece diriferimento. Itnon lo famodificareil primo valore. Unemendamento creatoin passatoil valore noEtàil valore particolare.all'interno delseguente esempio,abbiamopassaggiovalore in tuttoilchiamata.
Esempio:
utilizzando lo spazio dei nomi di sistema CallByValue {class Edureka {public void Show (int val) {val * = val Console.WriteLine ('The value inside the show function' + val)} static void Main (string [] args) {int val = 50 Programma Edureka = new Edureka () Console.WriteLine ('Value before calling the function' + val) program.Show (val) Console.WriteLine ('Value after calling the function' + val)}}}//Produzione:
Valore prima di chiamare la funzione 50
Il valore all'interno della funzione show 2500
Valore dopo aver chiamato la funzione 50
Chiama per riferimento
Nel metodo Call by Reference,per rif parola chiave per passare l'argomento come tipo di riferimento. Passa il riferimento degli argomenti alla funzione piuttosto che una copia del valore originale. Le modifiche ai valori passati sono permanenti e modificare il valore della variabile originale.
Esempio:
using System namespace CallByReference {class Edureka {public void Show (ref int val) {val * = val Console.WriteLine ('The value inside the show function' + val)} static void Main (string [] args) {int val = 50 Edureka program = new Edureka () Console.WriteLine ('Value before calling the function' + val) program.Show (ref val) Console.WriteLine ('Value after calling the function' + val)}}}//Produzione:
Valore prima di chiamare la funzione 50
Il valore all'interno della funzione show 2500
Valore dopo aver chiamato la funzione 2500
Parametro di uscita
Il parametro Outfornisce su parola chiave per passare gli argomenti come out-type. È come il tipo di riferimento, tranne per il fatto che non richiede l'inizializzazione della variabile prima di passare. Dobbiamo usare su parola chiave per passare l'argomento come out-type. È utile quando vogliamo che una funzione restituisca più valori.
Esempio:
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 ('Valore prima di distribuire la variabile' + val) programma.Show (out val) Console.WriteLine ('Value after recieving the out variable' + val)}}}//Produzione:
Valore prima di distribuire la variabile 50
Valore
dopo aver ricevuto la variabile out 25
Passiamo ora alla programmazione orientata agli oggetti
Programmazione orientata agli oggetti
Programmazione orientata agli oggetti Sistemaè un paradigma di programmazione basato sul concetto di oggetti che contengono membri dei dati e metodi relativi a loro. Lo scopo principale della programmazione orientata agli oggetti è aumentare la flessibilità e la manutenibilità dei programmi
Caratteristiche della programmazione orientata agli oggetti:
- Dà più importanza ai dati piuttosto che alla procedura.
- I programmi sono suddivisi in oggetti, facilitando così il lavoro.
- Le strutture dati sono progettate in modo tale da caratterizzare gli oggetti.
- Funzioni che funzionano sui dati di un oggetto vengono inseriti insieme nella struttura dati.
- I dati sono nascosti e non è possibile accedervi da funzioni esterne senza autorizzazione.
- La comunicazione tra gli oggetti può avvenire con l'ausilio di funzioni.
- Aggiungere nuovi dati e funzioni è diventato facile.
- Segue l'approccio dal basso verso l'alto nella progettazione del programma.
I paradigmi orientati agli oggetti in C # sono i seguenti
- Enumerazione in C #
- Approccio alla programmazione orientata agli oggetti
- Sovraccarico e override
- Spazio dei nomi
- Operazioni sui file
- Eventi
- Generici
- Delegati
- Riflessione
Enumerazione in C #
Enum o anche chiamato come enumerazione in C # viene utilizzato per memorizzare valori costanti senza doverli alterare durante l'intera esecuzione di un programma C #. Itviene utilizzato per memorizzare un insieme di costanti denominate come stagione, giorni, mese, dimensione, ecc
Esempio:
using System public class EnumExample {public enum week {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} public static void Main () {int x = (int) week.Monday int y = (int) week.Friday Console .WriteLine ('Monday = {0}', x) Console.WriteLine ('Friday = {0}', y)}}//Produzione:
Lunedì = 0
Venerdì = 4
Approccio alla programmazione orientata agli oggetti
Lo stile di programmazione orientato agli oggetti può essere ottenuto seguendo i metodi prescritti di seguito.
Incapsulamento
Incapsulamento è un metodo per combinare il metodi insieme al loro membri dei dati.
Esempio:
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 (' Larghezza: {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 ()}}}//Produzione:
Lunghezza: 50
Larghezza: 35
Area: 1750
Astrazione
Astrazione è un metodo per nascondere la parte complessa di codifica da parte dell'utente fornendogli solo le informazioni richieste di cui ha bisogno.
Esempio:
using System public abstract class 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 ()}}//Produzione:
disegno rettangolo ...
disegno cerchio ...
Interfaccia
Il interfaccia è completamente simile ad Abstraction. La funzionalità di un'interfaccia consiste nel nascondere i dati non importanti all'utente e fornirgli gli unici dati importanti di cui ha bisogno.
Esempio:
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 ()}}//Produzione:
disegno rettangolo ...
disegno cerchio ...
Polimorfismo
Polimorfismoè la combinazione di 'poli' + 'Morphs' il che significa molte forme. È una parola greca. Significa che il segmento di codice può assumere più forme. Abbiamo due tipi di polimorfismo.
- Compile Time Polymorphism
- Polimorfismo a tempo di esecuzione
Esempio:
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)}}//Produzione:
bianca
Eredità
Eredità è un processo in cui un oggetto acquisisce automaticamente tutte le proprietà e i comportamenti del suo oggetto genitore. È possibile riutilizzare, estendere o modificare gli attributi e i comportamenti definiti in un'altra classe. viene chiamata la classe che eredita i membri di un'altra classe classe derivata e la classe i cui membri vengono ereditati è chiamata base classe. La classe derivata è la classe specializzata per la classe base.
Esempio di ereditarietà a livello singolo
using System namespace RectangleApplication {class Rectangle {protected double length protected double width 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 () }}}//Produzione:
Lunghezza: 4,5
Larghezza: 7.5
Area: 33,75
Costo: 2362,5
Esempio di ereditarietà multilivello
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} interfaccia pubblica 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 ('Area totale: {0}', Rect.getArea ()) Console.WriteLine ('Totale costo della pittura: $ {0} ', Rect.getCost (area)) Console.ReadKey ()}}}//Produzione:
Superficie totale: 35
Costo totale della vernice: $ 2450
Sovraccarico
Il sovraccarico è una situazione in cui abbiamo due o membri dichiarati utilizzando lo stesso nome. Il sovraccarico è possibile anche quando dichiariamo anche due o più metodi con lo stesso nome. Controlliamo esempi di entrambi.
Sovraccarico dei membri
Esempio:
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))}}//Produzione:
35
60
Metodo di sovraccarico
Esempio:
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))}}//Produzione:
35
33.699997
Overriding
L'override è una situazione in cui la classe figlia definisce lo stesso metodo che anche il genitore sta definendo. Cerchiamo di capirlo attraverso un piccolo esempio.
Esempio:
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 Overriding {public static void Main () {Dog d = new Dog () d.eat ()}}//Produzione:
Mangiare cibo
Spazio dei nomi
Il spazio dei nomi è fondamentalmente utilizzato per gestire più classi presenti nel programma. Lo spazio dei nomi è disponibile in diversi modi.
- System.Console: Qui, il Sistema diventa lo spazio dei nomi
- Per accedere alla classe di uno spazio dei nomi, dobbiamo usare namespacename.classname.
- Possiamo usare il file utilizzando anche la parola chiave.
Esempio:
using System using First using Second namespace First {public class Edureka {public void sayWelcome () {Console.WriteLine ('Welcome To Edureka')}}} namespace Second {public class Happy_Learning {public void sayWishes () {Console.WriteLine (' Happy Learning ')}}} public class Namespace {public static void Main () {Edureka h1 = new Edureka () Happy_Learning w1 = new Happy_Learning () h1.sayWelcome () w1.sayWishes ()}}//Produzione:
Benvenuto in Edureka
Buon apprendimento
Operazioni sui file
Il operazioni sui file disponibili in C # sono i seguenti:
Operazione Descrizione BinaryReader Legge i dati primitivi da un flusso binario. BinaryWriter Scrive dati primitivi in formato binario. BufferedStream Archiviazione temporanea per un flusso di byte. Directory Aiuta a manipolare una struttura di directory. DirectoryInfo Utilizzato per eseguire operazioni sulle directory. DriveInfo Fornisce informazioni per le unità. File Aiuta a manipolare i file. FileInfo Utilizzato per eseguire operazioni sui file. FileStream Utilizzato per leggere e scrivere in qualsiasi posizione in un file. MemoryStream Utilizzato per l'accesso casuale ai dati in streaming archiviati in memoria. Sentiero Esegue operazioni sulle informazioni sul percorso. StreamReader Utilizzato per leggere caratteri da un flusso di byte. StreamWriter Viene utilizzato per scrivere caratteri in un flusso. StringReader Viene utilizzato per la lettura da un buffer di stringa. StringWriter Viene utilizzato per scrivere in un buffer di stringhe. FileMode
Il FileMode è un enumeratore che definisce più metodi di apertura dei file. I membri dell'Enumeratore FileMode sono descritti come segue:
- Aggiungere: Apre un file esistente e posiziona il cursore alla fine del file o crea il file se il file non esiste.
- Creare: È progettato per creare un nuovo file.
- Creare nuovo: È progettato per specificare al sistema operativo che deve creare un nuovo file.
- Aperto: È progettato per aprire un file esistente.
- OpenOrCreate: È progettato per specificare il sistema operativo che dovrebbe aprire un file se esiste, altrimenti dovrebbe creare un nuovo file.
- Troncare: Truncate apre un file esistente e ne tronca la dimensione a zero byte.
FileAccess
FileAccess L'enumeratore viene utilizzato per ottenere l'accesso a un particolare file. Ha i seguenti membri.
- Leggere
- Scrivi
- Leggere scrivere
FileShare
Il Condivisione file L'enumeratore viene utilizzato per condividere un particolare file. Ha i seguenti membri.
- Ereditabile: Ereditabile consente a un filehandle di passare un'eredità ai processi figli.
- Nessuna: Nessuno rifiuta la condivisione del file corrente
- Leggere: Lettura consente di aprire il file per la lettura.
- Leggere scrivere: ReadWrite consente di aprire il file per la lettura e la scrittura.
- Scrivi: Scrivi consente di aprire il file per la scrittura.
Eventi
Un evento è generalmente noto come un'azione generata dall'utente. Potrebbe essere un clic del mouse e persino una singola pressione di un tasto dalla tastiera. Allo stesso modo, anche i programmi C # hanno eventi. Il generatore dell'evento si chiama editore e il destinatario dell'evento si chiama abbonato.
Editore
PER editore contiene la definizione dell'evento e del delegato. Il delegato-evento l'associazione è definita in questo oggetto. UN editore oggetto di classe richiama l'evento e viene notificato ad altri oggetti.
Abbonato
PER abbonato accetta l'evento e fornisce un gestore di eventi. Il delegare nella classe editore richiama il metodo / evento gestore della classe dell'abbonato.
Esempio:
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 'Welcome To Edureka . '+ nomeutente} static void Main (string [] args) {EventBlock obj1 = new EventBlock () string result = obj1.NewEvent (' Happy Learning ') Console.WriteLine (result)}}}//Produzione:
Benvenuto in Edureka. Buon apprendimento
Generici
Generici è un concetto di fornire i membri e i metodi di una classe con segnaposto in Tempo di esecuzione. Possiamo definire Generics usando parentesi. Diamo un'occhiata ai seguenti esempi.
Generici in una classe
using System namespace Edureka {class GenericClass {public GenericClass (T msg) {Console.WriteLine (msg)}} class Program {static void Main (string [] args) {GenericClass gen = new GenericClass ('This message is from generic class' ) GenericClass genI = new GenericClass (123) GenericClass getCh = new GenericClass ('E')}}}//Produzione:
Questo messaggio proviene dalla classe generica
123
E
Generici in un metodo
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 il messaggio proviene dal metodo generico ') genC.Show (321) genC.Show (' H ')}}}//Produzione:
Questo messaggio proviene dal metodo generico
321
H
Delegati
Il Delegare funge da riferimento al metodo. Fondamentalmente è lo stesso di un puntatore a funzione in C e C ++ ma di gran lunga migliore e indipendente dai tipi. Il Delegato in metodo statico incapsula solo il metodo. Mentre il delegato in esempio metodo incapsula sia il metodo che l'istanza. Il miglior utilizzo di delegate consiste nell'usare come file evento.
Esempio:
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 () {return number} public static void Main (string [] args) {Calculator c1 = new Calculator (add) Calculator c2 = new Calculator (mul) c1 (20) Console.WriteLine ('After calculator un delegato, il nuovo numero è: '+ getNumber ()) c2 (3) Console.WriteLine (' Dopo la calcolatrice due delegati, il nuovo numero è: '+ getNumber ())}}//Produzione:
Dopo la calcolatrice un delegato, il nuovo numero è: 45
Dopo il delegato della calcolatrice due, il nuovo numero è: 135
Riflessione
La Reflection è necessaria per ottenere i metadati in fase di esecuzione. Il riferimento è disponibile in System.Reflection spazio dei nomi. Richiede le seguenti classi per essere eseguite.
- genere
- MemberInfo
- ConstructorInfo
- MethodInfo
- FieldInfo
- PropertyInfo
- TypeInfo
- EventInfo
- Modulo
- Assemblaggio
- AssemblyName
- Pointer
Tipo di classe
La classe Type C # rappresenta dichiarazioni di tipo per tipi di classe, tipi di interfaccia, tipi di enumerazione, tipi di matrice, tipi di valore
Proprietà del tipo
Di seguito è riportato un elenco di proprietà importanti delle classi Type.
Proprietà Descrizione Assemblaggio Ottiene l'assembly per questo tipo. AssemblyQualifiedName Ottiene il nome completo dell'assembly per questo tipo. Attributi Ottiene gli attributi associati al tipo. BaseType Ottiene il tipo di base o padre. Nome e cognome Ottiene il nome completo del tipo. IsAbstract viene utilizzato per verificare se il tipo è Abstract. IsArray viene utilizzato per verificare se il tipo è Array. IsClass viene utilizzato per verificare se il tipo è Class. IsEnum viene utilizzato per verificare se il tipo è Enum. IsInterface viene utilizzato per verificare se il tipo è Interface. IsNested viene utilizzato per verificare se il tipo è annidato. IsPrimitive viene utilizzato per verificare se il tipo è Primitivo. IsPointer viene utilizzato per verificare se il tipo è Pointer. IsNotPublic viene utilizzato per verificare se il tipo non è Pubblico. IsPublic viene utilizzato per verificare se il tipo è Pubblico. IsSealed viene utilizzato per verificare se il tipo è sigillato. IsSerializable viene utilizzato per verificare se il tipo è Serializzabile. MemberType viene utilizzato per verificare se il tipo è Tipo di membro di Tipo annidato. Modulo Ottiene il modulo del tipo. Nome Ottiene il nome del tipo. Spazio dei nomi Ottiene lo spazio dei nomi del tipo.
Proprietà Descrizione GetConstructors () Restituisce tutti i costruttori pubblici per Type. GetConstructors (BindingFlags) Restituisce tutti i costruttori per Type con BindingFlags specificato. GetFields () Restituisce tutti i campi pubblici per il tipo. GetFields (BindingFlags) Restituisce tutti i costruttori pubblici per Type con BindingFlags specificato. GetMembers () Restituisce tutti i membri pubblici per Type. GetMembers (BindingFlags) Restituisce tutti i membri per Type con BindingFlags specificato. GetMethods () Restituisce tutti i metodi pubblici per Type. GetMethods (BindingFlags) Restituisce tutti i metodi per Type con BindingFlags specificato. GetProperties () Restituisce tutte le proprietà pubbliche per Type. GetProperties (BindingFlags) Restituisce tutte le proprietà per Type con BindingFlags specificato. GetType () Ottiene l'oggetto Type corrente. GetType (stringa) Ottiene il tipo per il nome specificato. Esempi di riflessione:
Ottieni tipo
Esempio:
using System public class GetType {public static void Main () {int a = 10 Type type = a.GetType () Console.WriteLine (type)}}//Produzione:
System.Int32
Ottieni assemblaggio
Esempio:
utilizzando System utilizzando System.Reflection public class GetAssembly {public static void Main () {Type t = typeof (System.String) Console.WriteLine (t.Assembly)}}//Produzione:
System.Private.CoreLib, versione = 4.0.0.0, Culture = neutral, PublicKeyToken = 7cec85d7bea7798e
Informazioni sul tipo di stampa
Esempio:
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)}}//Produzione:
Vero
Falso
Falso
Costruttori di stampa
Esempio:
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)}}}//Produzione:
Costruttori di System.String tipo ...
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])
Metodi di stampa
Esempio:
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)}}}//Produzione:
Metodi di tipo 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) ......
Campi di stampa
Esempio:
utilizzando System utilizzando 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)}}}//Produzione:
Campi di System.String type ...
System.String Empty
Passiamo ora ad alcuni concetti avanzati di programmazione C #
Concetti avanzati di C #
Funzione anonima
Viene chiamata la funzione a cui manca un nome specifico Anonimo Funzioni. Sono disponibili due tipi di funzioni anonime in C #
- Espressioni lambda
- Metodi anonimi
Esempio:
utilizzando lo spazio dei nomi di sistema 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)}}}//Produzione:
Quadrato: 625
Metodi anonimi
Il metodo anonimo fornisce la stessa funzionalità di un file espressione lambda, tranne che ci permette di ignorare l'elenco dei parametri.
Esempio:
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 ()}}}//Produzione:
Questa è una funzione anonima
Multi-threading
Il multithreading è un processo in cui vengono creati e assegnati più thread per attività diverse. ciò consente di risparmiare tempo eseguendo più lavori contemporaneamente. La classe multithreading è disponibile in System.Threading spazio dei nomi.
System.Threading Namespace
Il System.Threading lo spazio dei nomi contiene classi e interfacce per facilitare il multithreading. Fornisce classi per sincronizzare la risorsa thread. Di seguito viene fornito un elenco delle classi comunemente utilizzate:
- Filo
- Mutex
- Timer
- Tenere sotto controllo
- Semaforo
- ThreadLocal
- ThreadPool
- Volatile
Processo e filo
Il processo è in realtà e applicazione ed è considerato un file dei pesi massimi componente. D'altra parte, Il filo è unico modulo dell'intera applicazione. È leggero rispetto al processo
Il ciclo di vita di un filo
Ogni thread ha un ciclo di vita. Il ciclo di vita del thread è definito nella classe System.Threading.Thread. Di seguito sono riportate le fasi del ciclo di vita di qualsiasi thread.
- Non avviato
- Runnable (pronto a correre)
- In esecuzione
- Non eseguibile
- Morto
La classe Thread fornisce le proprietà e i metodi seguenti come segue.
Proprietà del filo
Proprietà Descrizione CurrentThread restituisce l'istanza del thread attualmente in esecuzione. È vivo controlla se il thread corrente è attivo o meno. IsBackground Per ottenere / impostare il valore del thread corrente è in background o meno. ManagedThreadId viene utilizzato per ottenere l'ID univoco per il thread attualmente gestito. Nome viene utilizzato per ottenere o impostare il nome del thread corrente. Priorità viene utilizzato per ottenere o impostare la priorità del thread corrente. ThreadState viene utilizzato per restituire un valore che rappresenta lo stato del thread. Metodi di filettatura
Metodo Descrizione Aborto() viene utilizzato per terminare il thread. Genera ThreadAbortException. Interrompere() viene utilizzato per interrompere un thread che si trova nello stato WaitSleepJoin. Aderire() viene utilizzato per bloccare tutti i thread chiamanti fino al termine di questo thread. ResetAbort () viene utilizzato per annullare la richiesta di interruzione per il thread corrente. Curriculum vitae() viene utilizzato per riprendere il thread sospeso. È obsoleto. Sonno (Int32) viene utilizzato per sospendere il thread corrente per i millisecondi specificati. Inizio() cambia lo stato corrente del thread in Runnable. Sospendere() sospende il thread corrente se non è sospeso. È obsoleto. Dare la precedenza() viene utilizzato per restituire l'esecuzione del thread corrente a un altro thread. Esempio di thread principale
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)}}//Produzione:
MainThread
La gestione delle eccezioni
Il eccezione è un errore generato dal programma in fase di esecuzione. Eseguiamo la gestione delle eccezioni per rendere il nostro programma privo di eccezioni.
Eccezione Descrizione System.DivideByZeroException Errore generato dalla divisione di un numero per zero.
System.NullReferenceException gestisce l'errore generato facendo riferimento all'oggetto null.
System.InvalidCastException gestisce l'errore generato da un typecasting non valido.
System.IO.IOException gestisce gli errori di input / output. System.FieldAccessException Errore generato da un accesso privato / protetto non valido. In C #, utilizziamo 4 parole chiave per eseguire la gestione delle eccezioni:
Esempio:
- provare
- catturare
- infine, e
- gettare
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 ('Questo messaggio proviene dal blocco catch')}}//Produzione:
System.DivideByZeroException: tentativo di divisione per zero.
in ExExaEdurekample.Main (String [] args) in F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: riga 10
Questo messaggio proviene dal blocco catch
Esempio di eccezione personalizzata
using System public class InvalidAgeException: eccezione {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.') } }//Produzione:
InvalidAgeException: Spiacenti, l'età dovrebbe essere maggiore di 18
at Customized.validate (Int32 age) in F: C # Tutorial C # ProgramsConsoleApp1ConsoleApp1Program.cs: line 18
in Customized.Main (String [] args) in F: C # Tutorial C # ProgramsConsoleApp1ConsoleApp1Program.cs: riga 23
Il blocco di cattura è in esecuzione ora.
Infine blocco esempio
utilizzando la classe pubblica di sistema FinalExecption {public static void Main (string [] args) {try {int a = 10 int b = 0 int x = a / b} catch (Exception e) {Console.WriteLine (e)} finalmente {Console .WriteLine ('Alla fine il blocco viene eseguito')} Console.WriteLine ('Il blocco di cattura viene eseguito')}}//Produzione:
System.DivideByZeroException: tentativo di divisione per zero.
in FinalExecption.Main (String [] args) in F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: riga 10
Infine viene eseguito il blocco
Il blocco di cattura viene eseguito
Firma di eccezione di sistema
[SerializableAttribute] [ComVisibleAttribute (true)] public class SystemException: eccezioneCostruttori di eccezioni di sistema
Costruttore Descrizione SystemException () Viene utilizzato per inizializzare una nuova istanza della classe SystemException. SystemException (SerializationInfo, StreamingContext)
Viene utilizzato per inizializzare una nuova istanza della classe SystemException con dati serializzati. SystemException (String) Viene utilizzato per inizializzare una nuova istanza della classe SystemException con un messaggio di errore specificato. SystemException (stringa, eccezione) Viene utilizzato per inizializzare una nuova istanza della classe SystemException con un messaggio di errore specificato e un riferimento all'eccezione interna che è la causa di questa eccezione. Proprietà eccezione di sistema
Proprietà Descrizione Dati Viene utilizzato per ottenere una raccolta di coppie chiave / valore che forniscono ulteriori informazioni definite dall'utente sull'eccezione. HelpLink Viene utilizzato per ottenere o impostare un collegamento al file della guida associato a questa eccezione. HResult Viene utilizzato per ottenere o impostare HRESULT, un valore numerico codificato assegnato a un'eccezione specifica. InnerException Viene utilizzato per ottenere l'istanza di eccezione che ha causato l'eccezione corrente. Messaggio Viene utilizzato per ottenere un messaggio che descrive l'eccezione corrente. fonte Viene utilizzato per ottenere o impostare il nome dell'applicazione che causa l'errore. StackTrace Viene utilizzato per ottenere una rappresentazione di stringa dei frame immediati sullo stack di chiamate. TargetSite Viene utilizzato per ottenere il metodo che genera l'eccezione corrente. Metodi di eccezione del sistema
Metodi Descrizione Uguale a (oggetto) Viene utilizzato per verificare che l'oggetto specificato sia uguale o meno all'oggetto corrente. Finalizza () Viene utilizzato per liberare risorse ed eseguire operazioni di pulizia. GetBaseException () Viene utilizzato per ottenere l'eccezione di root. GetHashCode () Viene utilizzato per ottenere il codice hash. GetObjectData (SerializationInfo, StreamingContext)
Viene utilizzato per ottenere i dati degli oggetti. GetType () Viene utilizzato per ottenere il tipo di runtime dell'istanza corrente. MemberwiseClone () Viene utilizzato per creare una copia superficiale dell'Oggetto corrente. Accordare() Viene utilizzato per creare e restituire una rappresentazione di stringa dell'eccezione corrente. Esempio di eccezione di sistema
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)} }}}//Produzione:
System.IndexOutOfRangeException: l'indice era al di fuori dei limiti della matrice.
in CSharpProgram.SystemExceptionExample.Main (String [] args) in F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: riga 11
Sincronizzazione
Nel programma multithread, i thread sono consentitiper accedere a qualsiasi risorsa per ilesecuzione specificatatempo. I thread condividono le risorse ed vengono eseguiti in modo asincrono. Accesso alle risorse condivise (dati)può essere un compito importantequello generalmentepotrebbe fermarsiil sistema.abbiamo la tendenza a influenzarlocreando thread in modo sincrono.
Esempio senza sincronizzazione
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() } }//Produzione:
uno
uno
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
Esempio con sincronizzazione
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() } }//Produzione:
uno
2
3
4
5
6
7
8
9
10
uno
2
3
4
5
6
7
8
9
10
Nuove caratteristiche
Microsoft ha aggiunto molte funzionalità più recenti al linguaggio C #, alcune di esse sono menzionate di seguito.
C # 6.0
- Utilizzo della direttiva statica
- Filtri di eccezione
- Attendi in blocchi di cattura / finalmente
- Inizializzatori di proprietà automatici
- Valori predefiniti per le proprietà solo getter
- Membri con corpo di espressione
- Propagatore nullo
- Interpolazione di stringhe
- Nome dell'operatore
- Inizializzatore del dizionario
- Compilatore come servizio (Roslyn)
C # 7.0
- Corrispondenza del modello
- Tuple
- Decostruzione
- Funzioni locali
- Separatore di cifre
- Letterali binari
- Ritorni di riferimento e gente del posto
- Costruttori e finalizzatori con corpo di espressione
- Getter e setter con corpo di espressione
- Fuori variabili
- Tipi restituiti asincroni generalizzati
C # 7.1
- Async main
- Espressioni predefinite
Domande di intervista basate su C #
Le importanti domande dell'intervista basate sul linguaggio di programmazione C # sono disponibili in questo aggiornamento .
Con questo, arriviamo alla fine di questo articolo 'Tutorial C #'. Spero che tu abbia compreso l'importanza delle strutture dati, della sintassi, delle funzionalità e delle operazioni eseguite utilizzandole. Ora che hai compreso le basi della programmazione in C # attraverso questoEsercitazione su C #, controlla il formazione fornita da Edureka su molte tecnologie come Java, Primavera e moltiinoltre, un'azienda di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo ha ottenuto un domanda per noi? Menzionalo nella sezione commenti di questo blog 'Tutorial C #' e ti risponderemo il prima possibile.