Esercitazione su C #: le nozioni di base di cui hai bisogno per padroneggiare C #



Questo articolo sull'esercitazione di C # ti aiuterà con una conoscenza dettagliata dei fondamenti di C # insieme ad esempi in tempo reale per una migliore comprensione.

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 #

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.



C#-Tutorial-hejlsberg_bio

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:

  1. If dichiarazione
  2. Istruzione If-Else
  3. Istruzione If-else annidata
  4. If-Else If ladder
  5. 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 String

Esempio:

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


Array

Simile 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'array

Esempio:

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
5Akash

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 html
using 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

Valoredopo 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 #

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:

  • provare
  • catturare
  • infine, e
  • gettare
Esempio:
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: eccezione

Costruttori 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

La sincronizzazione può essere una tecnica che consente a un solo thread di accedere alla risorsa per un tempo specifico. Nessun thread alternativo verrà interrotto fino a quando il thread designato non avrà terminato il suo compito.

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.