C # Tutorial: els fonaments que heu de dominar C #



Aquest tutorial sobre l'article sobre C # l'ajudarà amb un coneixement detallat sobre els fonaments de C # juntament amb exemples en temps real per a una millor comprensió.

C # és un llenguatge de programació universal i desenvolupat per Microsoft Corporation l'any 2000 com a competidor mortal de Java. És el llenguatge de programació més popular i dominant tant pel que fa al desenvolupament web com al desenvolupament d'aplicacions d'escriptori.

En aquest tutorial de C #, aprendrem els conceptes següents.





C # Conceptes bàsics

Introducció al llenguatge de programació C #

A principis dels 90, Java era el llenguatge de programació líder en desenvolupament web, desenvolupament d'aplicacions d'escriptori i molts altres camps. Microsoft volia arribar a un competidor amb moltes funcions avançades que puguin deixar Java molt enrere.



C#-Tutorial-hejlsberg_bio

Va ser l'any 2000, Anders Hejlsberg i al seu equip de Microsoft va sorgir la idea de C # popularment anomenat C-Sharp. Aquesta iniciativa va ser aprovada per l'Organització Internacional de Normes (MAJOR) i l'Associació Europea de Fabricants d'Informàtica (ECMA). i finalment, The C # entra al món del desenvolupament de programari.

Característiques del llenguatge de programació C #



  • Llenguatge de programació orientat a objectes

L’enfocament de la programació orientada a objectes és el que fa que C # sharp sigui el llenguatge de programació més fàcil de programar i fàcil de desenvolupar i mantenir.

  • Idioma de tipus segur

El significat de Type-Safe és que el compilador només tindrà accés a la ubicació de memòria que tingui el permís per executar. Aquesta característica millora la seguretat del codi a un nivell exponencial.

  • Interoperabilitat

La característica d’Interoperabilitat fa que C # sigui prou capaç de fer tot allò que és natiu de C ++ d’una manera més eficient que pugui superar el propi C ++.

  • Biblioteca rica

C # proporciona accés a diverses biblioteques integrades que proporcionen funcionalitats preprogramades per reduir el temps dedicat al procés de desenvolupament.

  • Escalable i actualitzable

C # va ser dissenyat per ser superior entre els altres llenguatges de programació. Per tant, sempre està obert a les actualitzacions i es manté altament escalable amb les seves funcions.

  • Orientat als components

Els desenvolupadors de Microsoft van utilitzar l'enfocament basat en components per desenvolupar C #. Aquesta és la metodologia de desenvolupament més predominant per mantenir C # altament escalable i actualitzat.

  • Llenguatge estructurat

L'enfocament de programació estructurada es prefereix durant el cicle de vida del desenvolupament de programari, ja que es fa fàcil desenvolupar la compilació i desplegament del programari en comparació amb l'enfocament de programació orientat a procediments.

  • Ràpid

La programació C # és més ràpida en la compilació i execució en comparació amb C ++ i altres llenguatges de programació.

Instal·lació

Està demostrat que Microsoft Visual Studio és el millor editor de classe de programació C #. Instal·larem i configurarem Microsoft Visual Studio per executar els nostres programes C # seguint els passos esmentats a continuació:

Pas 1 : Descarregueu Microsoft Visual Studio

Google per al última versió de Visual Studio i descarregueu el fitxer instal·lar fitxer al vostre sistema local i després correr el fitxer d’instal·lació com a administrador.

Pas 2: seleccioneu el paquet de desenvolupament d'escriptori .NET

Un cop hàgiu executat l’instal·lador, l’Editor de Visual Studio es descarregarà amb èxit al vostre sistema local; més tard es mostrarà un quadre de diàleg a la pantalla de l’escriptori demanant a l’enemic paquet concret que necessiteu al vostre sistema. Aquí heu de seleccionar el fitxer Desenvolupament d'escriptori .NET paquet.

Pas 3: definiu l'entorn C #

Un cop fets els vostres paquets Desenvolupament .NET es descarregaran i es mostrarà a la pantalla un altre quadre de diàleg que us demanarà l'entorn de desenvolupament que esteu cercant. Aquí, cal seleccioneu l'entorn per a C #.

Pas 4: creeu el vostre primer projecte

Un cop configurat l’entorn, ja estareu bé. Inicieu Visual Studio i seleccioneu crear un nou projecte opció al quadre de diàleg que es mostra.

Se us redirigirà al següent quadre de diàleg i allà haureu de seleccionar Biblioteca de classes com a Estàndard .NET com es mostra a continuació.

Al següent quadre de diàleg, se us demanarà Configureu el vostre projecte . Configureu-lo i ja esteu a l'Editor. Escriviu el vostre primer programa i correr això. La sortida es mostrarà correctament al fitxer Símbol d'ordres.

utilitzant la classe del sistema Edureka {static void Main (string [] args) {Console.WriteLine ('Benvingut a Edureka !, Happy Learning ..!')}}

// Sortida:

Executem el nostre primer programa C #.

Estructura del programa C #

Ara que hem executat el nostre primer programa C #, entenem-ne detalladament l’estructura. Un programa C # senzill té les següents parts.

utilitzant l’espai de noms del sistema ConsoleApplication1 {public class Edureka {public static void Main (string [] args) {Console.WriteLine ('Benvingut a Edureka !, Happy Learning ..!')}}}

// Sortida:

Benvingut a Edureka !, Happy Learning ..!

  • classe: la classe es pot definir generalment com a paraula clau que s'utilitza per definir una classe al programa C #.
  • Edureka: És el nom del Classe. La classe sovint es considera com un pla que emmagatzema els membres i els mètodes relacionats amb la classe.
  • Principal: Bàsicament és el mètode primari de tot el programa C #, actua com la porta d’entrada del control per entrar al programa. S'executa abans que s'executi qualsevol altre mètode del programa.
  • buit: Aquest segment del codi es designa com a tipus de retorn del mètode. Pot ser qualsevol tipus de dades que no sigui nul·la. Buit significa que el mètode no en retorna cap de dades.
  • estàtic: Això és un paraula clau que diu que els membres declarats de dades són estàtics i que s’assigna una memòria dedicada als membres declarats.
  • Arguments de la cadena []: S'assembla als arguments de la línia d'ordres que fem servir al nostre programa. Mentre executem el nostre programa, bàsicament en passem alguns arguments, que serà acceptada pel programa a causa d'aquesta declaració.
  • System.Console.WriteLine ('Benvingut a Edureka !, Happy Learning ..!') Aquí, Sistema és el espai de noms. La consolaés la categoria descritaa l’espai de noms del sistema. El WriteLine () és que elestàtictècnicade Consolacategoria que s’utilitza per anotarel text de la consola.

Ara, aprenem els tipus de dades disponibles a C #.

Tipus de dades

A continuació es descriuen els tipus de dades de C # en tres categories.

Tipus de dades de valor

El Tipus de dades de valor es troben a la System.ValueType Biblioteca i sempre estan a punt per accedir-hi directament i les variables es poden assignar directament a un valor concret. Els tipus de dades de valor es classifiquen a més en dos tipus, tal com es mostra a continuació:

  • Tipus de dades predefinits
  • Tipus de dades definits per l'usuari

Tipus de dades predefinits: Aquests són els que normalment fem servir en la nostra programació diària. Aquests tipus de dades són predefinits pels desenvolupadors de llenguatges i es mantenen preparats per utilitzar-los per als programadors.

Exemple:

int, float, char, doble curt, etc.

Tipus de dades definits per l'usuari: Hi ha situacions en què és possible que haguem de desar diferents valors dels tipus de dades en una sola variable. En aquests casos, el Tipus de dades predefinits no n’hi ha prou. Usuari definit Els tipus de dades són com tipus de dades personalitzables per a l'usuari.

Exemple: Estructura, Enum

Tipus de dades Abast de la memòria assignada Mida de la memòria
signat -128 a 127 1 byte
caràcter sense signar 0 a 127 1 byte
char -128 a 127 1 byte
signat curt -32.768 a 32.767 2 Bytes
curt sense signar De 0 a 65.535 2 Bytes
curt -32.768 a 32.767 2 Bytes
signat int -2.147.483.648 a -2.147.483.647 4 Bytes
int signat De 0 a 4.294.967.295 4 Bytes
int -2.147.483.648 a -2.147.483.647 4 Bytes
signat llarg -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 8 Bytes
sense signar llarg De 0 a 18.446.744.073.709.551.615 8 Bytes
llarg -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 8 Bytes
flotar 1,5 * 10-45 - 3,4 * 1038, (precisió de 7 dígits) 4 Bytes
doble 5,0 * 10-324 - 1,7 * 10308, (precisió de 15 dígits) 8 Bytes
decimal -7,9 * 10-28 - 7,9 * 1028, (precisió de 28 dígits) 16 Bytes


Tipus de dades del punter

Pointer Type és un tipus de dades simple. La seva funcionalitat és completament similar als indicadors de C. Estan dissenyats per emmagatzemar l'adreça d'un altre punter.

flotador * ptr

Tipus de dades de referència

El nom s’explica per si mateix. El Tipus de dades de referència en realitat no emmagatzemen les variables, sinó que emmagatzemen el valor de referència a aquesta variable en particular. En altres paraules, emmagatzemen l'adreça de la variable real.

Les variables de referència es classifiquen en tres tipus diferents, tal com s’esmenta a continuació:

  • Tipus d'objecte

El tipus de dades d’objecte està disponible a Sistema.Objecte Classe.L’objectetipuspot serassignat al fitxervalors deels altres tipus,referènciatipus, predefinit, definit per l'usuaritipus. Però, abansassignacióvalors, requereix tipus conversió.

objecte abc abc = 50 // es diu boxa
  • Tipus dinàmic

Les variables de tipus dinàmic estan dissenyades per emmagatzemar gairebé tots els tipus de valors. Es diu com a tipus dinàmic perquè la comprovació de tipus de valors es realitza en temps d'execució

dinàmica x = 10
  • Tipus de cadena

El tipus de cadena està disponible a System.String classe. El tipus de cadena està dissenyat per emmagatzemar literals de cadena. Els literals de cadena s'emmagatzemen en dues formes adues formes

    • citat
    • @citat.
String S = 'Edureka'
  • El @citat La cadena literal sembla
@ 'Edureka'

Ara entenem les variables.

variables

Les variables són els noms assignats a la ubicació de memòria que emmagatzemen determinades dades proporcionades per l’usuari i que són fàcilment accessibles mitjançant el nom de la variable. Hi ha cinc tipus de variables disponibles a C #

Tipus Exemple
Nul Dades nul·les
Booleà Cert i fals
Enter Int, Char, Byte, Short, Long
Flotador Flotador i doble
Decimal Decimal

Exemple:

int a, b doble x float p char abc

Regles a seguir per declarar variables en C #

  • Una variable pot incloure alfabets, dígits i guions baixos.
  • Un nom de variable només pot començar només amb un alfabet o un subratllat.
  • Les variables no poden començar amb un dígit o un caràcter especial.
  • No es permeten espais en blanc entre el nom de la variable.
  • Les paraules clau reservades no poden utilitzar-se com a noms de variables.

Operadors

Un operador es pot definir com un símbol especial que explica que l'ordinador realitzi una determinada operació lògica sobre un conjunt de variables. C # inclou diversos operadors que s’esmenten a continuació.

  • Operadors aritmètics
  • Operadors relacionals
  • Operadors lògics
  • Operadors de bits
  • Operadors de tasques

Operadors aritmètics

Operador Exemple Descripció
+ A + B Afegeix dos operands
- A - B Resta dos operands
* A * B Múltiples dos operands
/ A / B Divideix dos operands
% A% B La resta de dos operands
++ A ++ Operació d'increment
- A- Operació Decrement

Operadors relacionals

Operador Exemple Descripció
== A == B És cert, si tots dos operands són iguals, en cas contrari Fals
! = A! = B És cert, si els dos operands no són iguals, sinó és fals
> A> B És cert, si A és més gran, sinó és fals
< A És cert, si B és més gran, si no, és fals
> = A> = B És cert, si A és més gran o igual, sinó és fals
<= A<= B És cert que l’identificador B és més gran, si no, és fals

Operadors lògics

Operador Exemple Descripció
&& A&&B És cert, si ambdós operands són certs, si no, és fals
|| A || B És cert, si un dels operands és cert, Else False
! A! B Inverteix l'estat lògic de l'operand

Operadors de bits

A B A & B A | B A ^ B
1 1 1 1 0
1 0 0 1 1
0 1 0 1 1
0 0 0 0 0
Operador Exemple Descripció
~ (~ A) L’operador de complement de Binary One és unari i té l’efecte de “capgirar” els bits.
<< A<<2 Operador de desplaçament binari esquerre. El valor d'operands esquerre es mou cap a l'esquerra pel nombre de bits especificat per l'operand dret.
>> A >> 2 Operador de desplaçament binari dret. El valor dels operands esquerra es mou cap a la dreta pel nombre de bits especificat per l’operand dret.

Operadors de tasques

Operador Exemple Descripció
= A = B + C A = B + C, B + C s’assigna a A
+ = A + = B A = A + B, A + B s’assigna a A
- = A - = B A = A-B, A-B s’assigna a A
* = A - = B A = A * B, A * B s’assigna a A
/ = A / = B A = A / B, A / B s’assigna a A
% = A% = B A = A% B, A% B està assignat a A
<<= A<<= 2 Operador de desplaçament i assignació a l'esquerra
>> = A >> = 2 Operador de desplaçament i assignació a la dreta
& = A & = 2 Operador de bits i tasques
^ = A ^ = 2 Operador d'assignació i exclusivitat de bits
| = A! = 2 Operador d'assignació i inclusió de bits

Bucles

A bucle La sentència s'utilitza per executar un bloc de sentències repetidament fins que es compleixi una condició particular. El llenguatge C # consta de les següents declaracions de bucle.

  • Per a bucle
  • Mentre que Loop
  • Fer mentre fa bucles

Per a bucle

El per a bucle s'utilitza per executar un segment de codi concret diverses vegades fins que es compleixi la condició donada.

Sintaxi

per a (increment / disminució de la condició d'inicialització) {// segment de codi}

Diagrama de flux:

Exemple:

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

// Sortida:

1
2
3
4
5

Mentre que Loop

El Mentre bucle s'utilitza per executar un segment de codi durant diverses vegades fins que es compleixi una condició específica.

estructures i algorismes de dades java

Sintaxi

while (condició) {// codi a executar}

Diagrama de flux:

Exemple:

utilitzant bucles d'espai de noms del sistema {classe Programa {static void Main (string [] args) {int x = 5 while (x<= 10) { Console.WriteLine('The value of a: {0}', x) x++ } Console.ReadLine() } } } 

// Sortida:

El valor de a: 5
El valor de a: 6
El valor de a: 7
El valor de: 8
El valor de a: 9
El valor de a: 10

Fer mentre fa bucles

El bucle Do while és completament similar al bucle While, però l’única diferència és que la condició es col·loca al final del bucle. Per tant, el bucle s’executa almenys una vegada.

Sintaxi

fer {// codi a executar} mentre (condició)

Diagrama de flux:

Exemple:

utilitzant l’espai de noms del sistema Edureka {class DoWhileLoop {public static void Main (string [] args) {int i = 1, n = 5, product {product = n * i Console.WriteLine ('{0} * {1} = { 2} ', n, i, producte) i ++} mentre que (i<= 10) } } } 

// Sortida:

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

Condicional

Enunciats condicionals s'utilitzen per executar declaració o grup de declaracions basat en alguna condició. Si el condició és cert llavors Enunciats C # s'executen d'una altra manera els següents declaració s’executarà.

Els diferents tipus d’enunciats condicionals en llenguatge C ++ són els següents:

  1. Si afirmació
  2. Declaració If-Else
  3. Instrucció imbricada If-else
  4. Si-Altres Si escala
  5. Instrucció de canvi

Si afirmació

El senzill si La declaració en llenguatge C # s'utilitza per executar el codi si una condició és certa. També s’anomena sentència de selecció unidireccional.

Sintaxi

if (expressió booleana) {// sentències executades si l'expressió booleana és certa}

Diagrama de flux:

Exemple:

utilitzant l’espai de noms del sistema Condicional {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.') } } } 

// Sortida:

2 és inferior a 5
Aquesta sentència sempre s’executa.

Declaració If-Else

El si una altra cosa La instrucció en llenguatge C s'utilitza per executar el codi si la condició és certa o falsa. També s’anomena sentència de selecció bidireccional.

Sintaxi

if (expressió booleana) {// sentències executades si l'expressió booleana és certa} else {// sentències executades si l'expressió booleana és falsa}

Diagrama de flux:

Exemple:

utilitzant l’espai de noms del sistema Condicional {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.') } } } 

// Sortida:

12 és superior o igual a 5
Aquesta sentència sempre s’executa.

Instrucció imbricada If-else

El niat si una altra cosa s'utilitza quan un programa requereix més d'una expressió de prova. També s’anomena declaració de selecció multidireccional. Quan hi ha una sèrie de decisions relacionades amb una declaració, les fem servir si una altra cosa declaració en forma imbricada.

Sintaxi

if (expressió booleana) {if (expressió imbricada-1) {// codi a executar} else {// codi a executar}} else {if (expressió imbricada-2) {// codi a executar } else {// codi a executar}}

Diagrama de flux:

Exemple:

utilitzant l’espai de noms del sistema Condicional {class Nested {public static void Main (string [] args) {int first = 7, second = -23, third = 13 if (first & gt second) {if (first

// Sortida:

13 és el més gran

Si no és una escala

El if-else-if La instrucció s'utilitza per executar un codi des de diverses condicions. També s’anomena declaració de decisió de camins múltiples. És una cadena de sentències if..else en què cada sentència if està associada a la sentència else if i last seria una sentència else.

Sintaxi

if (condició1) {// codi a executar si la condició1 és certa} else if (condició2) {// codi a executar si condició2 és certa} else if (condició3) {// codi a executar si condició3 és certa} ... else {// codi que cal executar si totes les condicions són falses}

Diagrama de flux:

Exemple:

utilitzant la classe de sistema 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 is 15 ') else if (i == 20) Console.WriteLine (' i is 20 ') else Console.WriteLine (' i no està present ')}}

// Sortida:

tinc 20 anys

Instrucció de canvi

Interruptor La declaració actua com a substitut d'una escala llarga if-else-if que s'utilitza per provar una llista de casos. Una instrucció switch conté una o més etiquetes de cas que es comproven amb l'expressió switch. Quan l'expressió coincideixi amb un cas, s'executarien les sentències associades amb aquest cas.

Sintaxi

switch (variable / expressió) {case value1: // Sentències executades si expressió (o variable) = valor1 break case value2: // Instruccions executades si expression (o variable) = value1 break ... ... ... .. ... ... per defecte: // Instruccions executades si no hi ha cap cas}

Diagrama de flux:

Exemple:

utilitzant l’espai de noms del sistema Condicional {class SwitchCase {public static void Main (string [] args) {char ch Console.WriteLine ('Introduïu un alfabet') 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 ('No és una vocal') break}}}}

// Sortida:

Introduïu un alfabet
és
Vocal

Cordes

Corda Datatype és membre de System.String Classe. És capaç d'emmagatzemar tipus de dades de caràcters. Podem realitzar diverses operacions a Stings com araconcatenació, comparació, obtenció de subcadena, cerca, retallada, substitució i molts més.

L’analogia de corda i corda

A C # Corda i corda són equivalents. La paraula cadena és a paraula clau i actua com el System.String classe. Podem utilitzar qualsevol de les versions per declarar cadenes.

Sintaxi:

string s1 = 'Edureka' // creació de cadenes amb la paraula clau cadena String s2 = 'Happy Learning' // creació de cadenes mitjançant la classe String

Exemple:

utilitzant 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 '} cadena s2 = nova cadena (ch) Console.WriteLine ( s1) Console.WriteLine (s2)}}

// Sortida:

Edureka
Tutorial de Csharp

Mètodes de cadena en C #

Mètode Descripció
Clona () S'utilitza per retornar una referència a aquesta instància de cadena.
Compara (cadena, cadena) S'utilitza per comparar dos objectes de cadena especificats.
Concat (Corda, Corda) Concatenar dues instàncies especificades de cadena.
Conté (cadena) Retorna un valor que indica una sub-cadena especificada
Copia (cadena) S'utilitza per crear una nova instància de cadena amb el mateix valor
Copiar (Int, Char [], Int, Int) Copia caràcters des d'una posició especificada
Iguals (cadena, cadena) Determina que dos objectes de cadena tenen el mateix valor.
Format (cadena, objecte) Substituïu un o més elements de format en una cadena especificada
IndexOf (String) Informa de l'índex basat en zero de la primera ocurrència
Insereix (Int32, cadena) Retorna una cadena nova en què s'insereix una cadena en un índex.
IsInterned (String) Indica que aquesta cadena es troba en la forma de normalització Unicode C.
IsNullOrEmpty (String) Indica que la cadena especificada és nul·la o una cadena buida.
IsNullOrWhiteSpace (cadena) S'utilitza per indicar si una cadena especificada és nul·la, buida,
Unir-se (cadena, cadena []) S'utilitza per concatenar tots els elements d'una matriu de cadenes
LastIndexOf (Char) Informa de la posició d'índex basada en zero de l'últim caràcter
LastIndexOfAny (Char []) Informa de la posició d'índex basada en zero de l'últim caràcter
Elimina (Int32) Retorna una nova cadena en què apareixen tots els caràcters
Substitueix (cadena, cadena) Retorna una cadena nova en què apareixen totes les aparicions d'una cadena
Dividir (Char []) S'utilitza per dividir una cadena en subcadenes
Comença amb (cadena) S'utilitza per comprovar si el començament d'aquesta cadena
Subcadena (Int32) S'utilitza per recuperar una subcadena d'aquesta instància.
ToCharArray () Copia els caràcters d'aquesta instància a una matriu Unicode.
ToString () S'utilitza per retornar la instància de String.
Retalla () Retalla la corda


Matrius

De manera similar a altres llenguatges de programació, C # té matrius. Les matrius són les estructures de dades simples dissenyades per emmagatzemar el mateix tipus de dades d’elements en una ubicació de memòria contigua.

C # admet els següents tipus de matriu.

  • Matriu unidimensional
  • Matriu multidimensional
  • Matriu dentada

Matriu unidimensional

El Single Dimensional Array emmagatzema els elements en forma d'una sola fila.

Sintaxi

int [] arr = new int [5] // creació de matriu

Exemple:

utilitzant 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 for (int i = 0 i 

// Sortida:

10
20
30
40
50

Matriu multidimensional

Multidimensional Array emmagatzema elements en forma de múltiples dimensions com una matriu i un cub, etc.

Sintaxi

int val = a [2,3]

Exemple:

utilitzant l’espai de noms del sistema 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 per a (i = 0 i<5 i++) { for (j = 0 j < 2 j++) { Console.WriteLine('a[{0},{1}] = {2}', i, j, a[i, j]) } } Console.ReadKey() } } } 

// Sortida:

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

Matriu dentada

Matriu dentada és simplement una matriu de matrius.

Exemple:

utilitzant l’espai de noms del sistema ArrayApplication {classe 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 per (i = 0 i<5 i++) { for (j = 0 j < 2 j++) { Console.WriteLine('a[{0}][{1}] = {2}', i, j, a[i][j]) } } Console.ReadKey() } } } 

// Sortida:

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

Col·leccions

La col·lecció es pot considerar simplement com un grup d'objectes recopilats junts per aplicar algunes funcions a les dades recollides. Les operacions que un cop es poden realitzar en una col·lecció són,

  • emmagatzemar objecte
  • objecte d'actualització
  • esborrar objecte
  • recuperar objecte
  • objecte de cerca i
  • ordenar objecte

Tipus de col·leccions

Hi ha tres possibilitats diferents per treballar amb col·leccions. A continuació s’esmenten els tres espais de noms:

  • System.Collections.Generic classes
  • System.Collections classes
  • System.Collections.Current classes

La classe System.Collections.Generic té les següents varietats de classes:

  • Llista
  • Pila
  • Cua
  • Llista enllaçada
  • HashSet
  • SortedSet
  • Diccionari
  • Diccionari ordenat
  • Llista ordenada

El System.Collections les classes es consideren classes heretades. inclouen les següents classes.

  • ArrayList
  • Pila
  • Cua
  • Taula d’hastes

El System.Collections.Current classesL'espai de noms proporciona classes per a operacions segures per a fils. Ara diversos fils no crearan cap problema per accedir als elements de la col·lecció. les classes disponibles en això són,

transferir fitxers a la instància de Windows ec2
  • BlockingCollection
  • ConcurrentBag
  • ConcurrentStack
  • ConcurrentQueue
  • ConcurrentDictionary
  • Particions
  • Particions
  • OrderablePartitioner

Llista

El llista es considera com una estructura de dades disponible a System.Collection.Generics espai de noms. Pot emmagatzemar i obtenir elements. La llista pot emmagatzemar elements duplicats.

Exemple:

fent servir System mitjançant System.Collections.Generic public class Edureka {public static void Main (string [] args) {var names = new List () names.Add ('Sandhya') names.Add ('Arun') names.Add ( Noms 'Prashanth'). Afegeix ('Kiran') foreach (nom var en els noms) {Console.WriteLine (nom)}}}

// Sortida:

Sandhya
Arun
Prashanth
Kiran

Conjunt de hash

C # HashSetla categoria sol estar acostumadabotiga,emportaro béllegir components. Aixòno ho faemmagatzemar duplicatscomponents.s’instausar HashSet categoriasitensper guardarúnicament distintiu components . és es troba a l’espai de noms System.Collections.Generic.

Exemple:

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

// Sortida:

Sunil
Amar
Pujari
Imran
karan

Conjunt ordenat

C # SortedSetla classe sol estar acostumadabotiga, eliminar o bé llegir elements . Manté un ordre ascendent ino ho faemmagatzemar duplicatselements.és ràpidper utilitzar SortedSetcategoriasitensper guardar distintiu components i mantenir l'ordre ascendent.éses troba a l’espai de noms System.Collections.Generic.

Exemple:

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

// Sortida:

Anuradha
Kajol
Praveen
Ravi
Sanjay

Pila

El apilar és una col·lecció senzilla que segueix FILO o primer en el darrer procediment de sortida mentre es processen els elements emmagatzemats.

Exemple:

utilitzant System utilitzant System.Collections.Generic public class Edureka {public static void Main (string [] args) {Stack names = new Stack () names.Push ('Chandan') names.Push ('Pooja') names.Push ( Noms de 'James'. Noms de Push ('Rajesh'). Push ('kumar') foreach (nom de la cadena als noms) {Console.WriteLine (nom)} Console.WriteLine ('Element Peek:' + names.Peek () ) Console.WriteLine ('Pop:' + names.Pop ()) Console.WriteLine ('After Pop, element Peek:' + names.Peek ())}}

// Sortida:

kumar
Rajesh
James
Pooja
Chandan
Element Peek: kumar
Pop: kumar
Després de Pop, element Peek: Rajesh

Cua

La cua és totalment similar a Stack, però l’única diferència és que la cua segueix FIFO o el principi de primer i primer de sortida mentre es processen els elements que s'emmagatzemen.

Exemple:

utilitzant System utilitzant System.Collections.Generic public class Edureka {public static void Main (string [] args) {Noms de cua = new Queue () names.Enqueue ('Srujan') names.Enqueue ('Prajat') names.Enqueue ( Noms 'John'). Noms d'Enqueue ('Raju'). Necessitat ('Hari') per a tots (nom de la cadena als noms) {Console.WriteLine (nom)} Console.WriteLine ('Element Peek:' + noms.Peek () ) Console.WriteLine ('Dequeue:' + names.Dequeue ()) Console.WriteLine ('After Dequeue, Peek element:' + names.Peek ())}}

// Sortida:

Srujan
Prajat
Joan
Ferotge
Dia
Element d’observació: Srujan
Dequeue: Srujan
Després de Dequeue, element Peek: Prajat

Llista enllaçada

La llista enllaçada és una col·lecció de memòria dinàmica. Els elements de la llista enllaçada s’emmagatzemen accedint a la memòria des de l’emmagatzematge dinàmic i emmagatzemant-los en un ordre continu enllaçant les seves adreces.

Exemple:

fent servir System mitjançant System.Collections.Generic public class Edureka {public static void Main (string [] args) {var names = new LinkedList () names.AddLast ('Rajat') names.AddLast ('Arun') names.AddLast ( Noms 'Prakash'). Noms Add.Last ('jay'). AddFirst ('sai') foreach (nom var en els noms) {Console.WriteLine (nom)}}}

// Sortida:

sai
Límits
Arun
Prakash
jay

Diccionari

Diccionari categoriautilitza el fitxerideade l'etiqueta. Emmagatzema valors ala premissade la clau. Contédistintiuclausúnicament. Perl'assistènciade clau,simplement ho faremcerca otreure elements.éses troba a l’espai de noms System.Collections.Generic.

Exemple:

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

// Sortida:

1 Xiva
2 Prasad
3 Preetam
4 Roy
5Akash

Diccionari ordenat

El Diccionari ordenat categoriautilitza el fitxerdissenyde l'etiqueta. Emmagatzema valors ala ideade la clau. Contédistintiutecles i manté l'ordre ascendent activatla ideade la clau. Perl'assistènciade clau,simplement ho faremcerca otreure elements.éses troba a l’espai de noms System.Collections.Generic.

Exemple:

fent servir System mitjançant System.Collections.Generic public class Edureka {public static void Main (string [] args) {SortedDictionary names = new SortedDictionary () names.Add ('1', 'Arun') names.Add ('4', Noms 'Vishal'). Afegeix noms ('5', 'Ramesh'). Afegeix noms ('3', 'Vidya'). Afegeix ('2', 'Pallavi') foreach (KeyValuePair kv en noms) {Consola. WriteLine (kv.Key + '' + kv.Value)}}}

// Sortida:

1 Xiva
2 Prasad
3 Preetam
4 Roy
5Akash

Llista ordenada

El Llista ordenada ésunmatriu de parells clau / valor. Emmagatzema valors ala premissade la clau. La llista ordenadacategoriacontédistintiutecles i manté l'ordre ascendent activatla premissade la clau. Perl'assistènciade clau,som capaços de senzillamentcerca o eliminaelements.éstrobat a System.Collections.Generic espai de noms.

Exemple:

fent servir System mitjançant System.Collections.Generic public class Edureka {public static void Main (string [] args) {SortedDictionary names = new SortedDictionary () names.Add ('1', 'Arun') names.Add ('4', Noms 'Vishal'). Afegeix noms ('5', 'Ramesh'). Afegeix noms ('3', 'Vidya'). Afegeix ('2', 'Pallavi') foreach (KeyValuePair kv en noms) {Consola. WriteLine (kv.Key + '' + kv.Value)}}}

// Sortida:

1 Arun
2 Pallavi
3 Vidya
4 Vishal
5Ramesh

Estructura

L’estructura és un tipus de dades definit per l’usuari dissenyat per emmagatzemar diversos elements dels diferents tipus de dades. L’estructura es declara mitjançant la paraula clau estruct.

Exemple:

utilitzant l’estructura del sistema Llibres {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 = 'C # Programming' Book1.author = ' Ramchandra Kumar 'Book1.subject =' Tutorial de programació C ++ 'Book1.book_id = 95908978 Book2.title =' Facturació de telecomunicacions 'Book2.author =' Karan 'Book2.subject =' Tutorial de facturació de telecomunicacions 'Book2.book_id = 18674900 Console.WriteLine ( 'Títol del llibre 1: {0}', Book1.title) Console.WriteLine ('Autor del llibre 1: {0}', Book1.author) Console.WriteLine ('Assumpte del llibre 1: {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 ('Assumpte del llibre 2: {0}', Book2.subject) Console.WriteLine ('Book 2 book_id: {0}', Book2.book_id) Console.ReadKey ()}}

// Sortida:

Títol del llibre 1: Programació C #
Llibre 1 Autor: Ramchandra Kumar
Assumpte del llibre 1: Tutorial de programació C ++
Llibre 1 book_id: 95908978
Títol del llibre 2: Facturació de telecomunicacions
Llibre 2 Autor: Karan
Assumpte del llibre 2: Tutorial sobre facturació de telecomunicacions
Llibre 2 book_id: 18674900

Funcions

La funció es defineix com un bloc de codi del codi principal. La funció s'utilitza per executar sentències especificades al bloc de codi. Una funció consisteix en els components següents.

  • Nom de la funció: És un nom distintiu que s’utilitza per fer una trucada de funció.
  • Tipus de devolució: Especifica el tipus de dades del valor de retorn de la funció.
  • Cos: Conté sentències executables.
  • Especificador d'accés: Especifica l'accessibilitat de les funcions a l'aplicació.
  • Paràmetres: És una llista d'arguments que podem passar a la funció durant la trucada.

Sintaxi

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

Exemple:

utilitzant l’espai de noms del sistema FunctionExample {class Edureka {string public 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' + missatge)}}}

// Sortida:

Funció Inside Show
Benvingut a Edureka

Les funcions es poden executar de 3 maneres diferents:

  • Truca per valor
  • Convocatòria per referència
  • Paràmetre de sortida

Truca per valor

A C #, valor tipus paràmetressónque passinuna rèplicade valor original alfunció en lloc dereferència. Aixòno ho famodificarel primer valor. Anesmena creadaen passatel valor noEdatel valor particular.dins deexemple següent,tenimpassarvalor a tot arreuelanomenada.

Exemple:

utilitzant l’espai de noms del sistema CallByValue {classe Edureka {public void Show (int val) {val * = val Console.WriteLine ('El valor dins de la funció show' + val)} static void Main (string [] args) {int val = 50 Programa Edureka = nou programa Edureka () Console.WriteLine ('Valor abans de trucar a la funció' + val). Mostra (val) Console.WriteLine ('Valor després de trucar a la funció' + val)}}}

// Sortida:

Valor abans de trucar a la funció 50
El valor dins de la funció show 2500
Valor després de trucar a la funció 50

Convocatòria per referència

Al mètode Truca per referència,a ref paraula clau per passar l'argument com a tipus de referència. Transmet la referència d'arguments a la funció en lloc d'una còpia del valor original. Els canvis en els valors passats són permanents i modificar el valor de la variable original.

Exemple:

utilitzant l’espai de noms del sistema CallByReference {classe Edureka {public void Show (ref int val) {val * = val Console.WriteLine ('El valor dins de la funció show' + val)} static void Main (string [] args) {int val = 50 Programa Edureka = nou programa Edureka () Console.WriteLine ('Valor abans de trucar a la funció' + val). Mostra (ref val) Console.WriteLine ('Valor després de trucar a la funció' + val)}}}

// Sortida:

Valor abans de trucar a la funció 50
El valor dins de la funció show 2500
Valor després de trucar a la funció 2500

Paràmetre de sortida

El paràmetre de sortidaproporciona fora paraula clau per passar arguments com a out-type. És com un tipus de referència, excepte que no requereix la inicialització de la variable abans de passar-la. Hem d’utilitzar fora paraula clau per passar l'argument com a out-type. És útil quan volem que una funció retorni diversos valors.

Exemple:

utilitzant l’espai de noms del sistema 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 () Programa Console.WriteLine ('Valor abans de passar la variable' + val). Mostra (out val) Console.WriteLine ('Valor després de rebre la variable out' + val)}}}

// Sortida:

Valor abans de passar la variable 50

Valordesprés de rebre la variable de sortida 25

Ara anem a la programació orientada a objectes

Programació orientada a objectes

Programació orientada a objectes Sistemaés un paradigma de programació basat en el concepte de objectes que contenen membres de dades i mètodes relacionat amb ells. El propòsit principal de la programació orientada a objectes és augmentar la flexibilitat i la mantenibilitat dels programes

Característiques de la programació orientada a objectes:

  • Es fa èmfasi més en les dades que en el procediment.
  • Els programes es divideixen en objectes, cosa que facilita el treball.
  • Les estructures de dades estan dissenyades de manera que caracteritzen els objectes.
  • Funcions que funcionen encèsles dades d'un objecte es col·loquen juntes a l'estructura de dades.
  • Les dades estan ocultes i no es pot accedir a les funcions externes sense permís.
  • La comunicació entre objectes pot tenir lloc amb l'ajut de funcions.
  • Afegir noves dades i funcions ha estat fàcil.
  • Segueix l'enfocament ascendent en el disseny de programes.

Els paradigmes orientats a objectes de C # són els següents

Enumeració en C #

Enum o també anomenat com a enumeració a C # s’utilitza per emmagatzemar valors constants sense haver d’alterar-los durant tota l’execució d’un programa C #. Aixòs'utilitza per emmagatzemar un conjunt de constants anomenades com ara temporada, dies, mes, mida, etc.

Exemple:

utilitzant System public class EnumExample {public enum week {dilluns, dimarts, dimecres, dijous, divendres, dissabte, diumenge} public static void Main () {int x = (int) week.Monday int y = (int) week.Friday Console .WriteLine ('dilluns = {0}', x) Console.WriteLine ('divendres = {0}', y)}}

// Sortida:

Dilluns = 0
Divendres = 4

Enfocament de programació orientada a objectes

L'estil de programació orientat a objectes es pot aconseguir seguint els mètodes prescrits a continuació.

Encapsulació

Encapsulació és un mètode per combinar mètodes juntament amb el seu membres de dades.

Exemple:

mitjançant l'espai de noms del sistema Edureka {class Rectangle {public double length public double width public double GetArea () {return length * width} public void Display () {Console.WriteLine ('Longitud: {0}', longitud) Console.WriteLine (' Amplada: {0} ', amplada) Console.WriteLine (' Àrea: {0} ', GetArea ())}} classe ExecuteRectangle {static void Principal (cadena [] args) {Rectangle r = new Rectangle () r.length = 50 r.width = 35 r.Display () Console.ReadLine ()}}}

// Sortida:

Llargada: 50
Amplada: 35
Superfície: 1750

Abstracció

Abstracció és un mètode per amagar la complexa part de codificació de l'usuari proporcionant-li només la informació necessària que necessita.

Exemple:

utilitzant el sistema de classe pública abstracta Forma {public abstract void draw ()} classe pública 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 ()}}

// Sortida:

dibuixant un rectangle ...
cercle de dibuix ...

Interfície

El interfície és completament similar a l’abstracció. La funcionalitat d’una interfície és ocultar a l’usuari les dades sense importància i proporcionar-li les úniques dades importants que necessita.

Exemple:

utilitzant la interfície pública del sistema 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 ()}}

// Sortida:

dibuixant un rectangle ...
cercle de dibuix ...

Polimorfisme

Polimorfismeés la combinació de 'Poli' + 'Morphs' el que significa moltes formes. És una paraula grega. Significa que el segment de codi pot adoptar diverses formes. Tenim dos tipus de polimorfisme.

  • Compilar polimorfisme de temps
  • Polimorfisme en temps d'execució

Exemple:

utilitzant el sistema 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)}}

// Sortida:

blanc

Herència

Herència és un procés en què un objecte adquireix automàticament totes les propietats i comportaments del seu objecte pare. Podeu reutilitzar, ampliar o modificar els atributs i comportaments que es defineixen en una altra classe. es diu la classe que hereta els membres d'una altra classe classe derivada i la classe els membres de la qual s'hereten es diu base classe. La classe derivada és la classe especialitzada per a la classe base.

Exemple d'herència d'un sol nivell

utilitzant l’espai de noms del sistema RectangleApplication {classe Rectangle {doble longitud protegida protegida doble amplada pública Rectangle (doble l, doble w) {length = l width = w} public doble GetArea () {return length * width} public void Display () {Consola. WriteLine ('Longitud: {0}', longitud) Console.WriteLine ('Amplada: {0}', amplada) Console.WriteLine ('Àrea: {0}', GetArea ())}} sobretaula: Rectangle {privat sobretaula pública de doble cost (doble l, doble w): base (l, w) {} pública doble GetCost () {cost doble = GetArea () * 70 cost de retorn} public void Display () {base.Display () Consola .WriteLine ('Cost: {0}', GetCost ())}} classe ExecuteRectangle {static void Main (string [] args) {Taula de taula t = nova Taula de taula (4.5, 7.5) t.Display () Consola.ReadLine () }}}

// Sortida:

Llargada: 4,5
Amplada: 7,5
Superfície: 33,75
Cost: 2362,5

Exemple d'herència multinivell

utilitzant l’espai de noms del sistema InheritanceApplication {classe Shape {public void setWidth (int w) {width = w} public void setHeight (int h) {height = h} wide width protegit int height} interfície pública PaintCost {int getCost (int area)} classe 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 = nova àrea Rectangle () int Rect.setWidth (5) Rect.setHeight (7) area = Rect.getArea () Console.WriteLine ('Àrea total: {0}', Rect.getArea ()) Console.WriteLine ('Total cost de la pintura: $ {0} ', Rect.getCost (area)) Console.ReadKey ()}}}

// Sortida:

Superfície total: 35
Cost total de la pintura: 2450 dòlars

Sobrecàrrega

La sobrecàrrega és una situació en què tenim dos o membres declarats que utilitzen el mateix nom. La sobrecàrrega també és possible quan declarem dos o més mètodes amb el mateix nom. Vegem exemples d'ambdós.

Sobrecàrrega de membres

Exemple:

utilitzant 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))}}

// Sortida:

35
60

Sobrecàrrega del mètode

Exemple:

utilitzant 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))}}

// Sortida:

35
33.699997

Sobresortint

La substitució és una situació en què la classe infantil defineix el mateix mètode que també defineix el pare. Entenguem-ho a través d’un petit exemple.

Exemple:

diferència entre mutable i immutable
utilitzant 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 ()}}

// Sortida:

Menjar

Espai de noms

El espai de noms s'utilitza bàsicament per manejar diverses classes presents al programa. L’espai de noms està disponible de diferents maneres.

  • System.Console: Aquí, el Sistema es converteix en l’espai de noms
  • Per accedir a la classe d’un espai de noms, hem d’utilitzar-lo namespacename.classname.
  • Podem utilitzar el utilitzant paraula clau també.

Exemple:

utilitzant el sistema fent servir First utilitzant 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 ')}}} classe pública Espai de noms {public static void Main () {Edureka h1 = new Edureka () Happy_Learning w1 = new Happy_Learning () h1.sayWelcome () w1.sayWishes ()}}

// Sortida:

Benvingut a Edureka
Aprenentatge feliç

Operacions de fitxers

El operacions de fitxers disponibles en C # són els següents:

Operació Descripció
Lector binari Llegeix dades primitives d'un flux binari.
BinaryWriter Escriu dades primitives en format binari.
BufferedStream Emmagatzematge temporal per a un flux de bytes.
Directori Ajuda a manipular una estructura de directoris.
DirectoryInfo S'utilitza per realitzar operacions en directoris.
DriveInfo Proporciona informació per a les unitats.
Dossier Ajuda a manipular fitxers.
FileInfo S'utilitza per realitzar operacions en fitxers.
FileStream S’utilitza per llegir i escriure des de qualsevol ubicació d’un fitxer.
MemoryStream S’utilitza per accedir aleatòriament a les dades emeses en memòria.
Camí Realitza operacions sobre la informació del camí.
StreamReader S’utilitza per llegir personatges d’un flux de bytes.
StreamWriter S'utilitza per escriure caràcters en un flux.
StringReader S'utilitza per llegir des d'una memòria intermèdia de cadenes.
StringWriter S'utilitza per escriure en una memòria intermèdia de cadenes.

FileMode

El FileMode és un enumerador que defineix múltiples mètodes d'obertura de fitxers. Els membres de FileMode Enumerator es descriuen de la següent manera:

  • Afegeix: Obre un fitxer existent i posa el cursor al final del fitxer o crea el fitxer si el fitxer no existeix.
  • Crear: Està dissenyat per crear un fitxer nou.
  • Crea un nou: Està dissenyat per especificar al sistema operatiu que ha de crear un fitxer nou.
  • Obert: Està dissenyat per obrir un fitxer existent.
  • OpenOrCreate: Està dissenyat per especificar el sistema operatiu que hauria d'obrir un fitxer si existeix, en cas contrari hauria de crear un fitxer nou.
  • Trunca: Trunca obre un fitxer existent i trunca la seva mida a zero bytes.

FileAccess

FileAccess L’enumerador s’utilitza per accedir a un fitxer concret. Té els membres següents.

  • Llegiu
  • Escriu
  • Llegir escriure

FileShare

El Compartir fitxers L’enumerador s’utilitza per compartir un fitxer concret. Té els membres següents.

  • Heretable: Heredable permet a un fitxer handle passar una herència als processos secundaris.
  • Cap: Cap no rebutja l'ús compartit del fitxer actual
  • Llegiu: Llegir permet obrir el fitxer per llegir.
  • Llegir escriure: ReadWrite permet obrir el fitxer per llegir i escriure.
  • Escriu: Escriure permet obrir el fitxer per escriure.

Esdeveniments

Un esdeveniment es coneix generalment com una acció que genera l'usuari. Pot ser un clic del ratolí i fins i tot una sola pulsació de tecla des del teclat. De la mateixa manera, els programes C # també tenen esdeveniments. El generador de l'esdeveniment es diu editor i el receptor de l'esdeveniment es diu subscriptor.

Editor

A editor conté la definició de l'esdeveniment i del delegat. El delegat d'esdeveniments l'associació es defineix en aquest objecte. A editor object object de classe invoca l'esdeveniment i es notifica a altres objectes.

Subscriptor

A subscriptor accepta l'esdeveniment i proporciona un gestor d'esdeveniments. El delegat a la classe de l'editor invoca el mètode / esdeveniment manipulador de la classe de subscriptors.

Exemple:

utilitzant l’espai de noms del sistema Edureka {cadena de delegat públic Del (string str) class EventBlock {event Del NewEvent public EventBlock () {this.NewEvent + = new Del (this.WelcomeUser)} cadena pública WelcomeUser (nom d’usuari de la cadena) {return 'Welcome to Edureka . '+ nom d'usuari} static void Main (string [] args) {EventBlock obj1 = new EventBlock () string result = obj1.NewEvent (' Happy Learning ') Console.WriteLine (result)}}}

// Sortida:

Benvingut a Edureka. Aprenentatge feliç

Genèrics

Genèrics és un concepte de proporcionar als membres i als mètodes d'una classe posseïdors de llocs a Temps d'execució. Podem definir genèrics mitjançant claudàtors. Vegem els exemples següents.

Genèrics en una classe

utilitzant l’espai de noms del sistema Edureka {class GenericClass {public GenericClass (T msg) {Console.WriteLine (msg)}} program Program {static void Main (string [] args) {GenericClass gen = new GenericClass ('Aquest missatge prové de generic class' ) GenericClass genI = new GenericClass (123) GenericClass getCh = new GenericClass ('E')}}}

// Sortida:

Aquest missatge prové de classe genèrica
123
ÉS

Genèrics en un mètode

utilitzant l’espai de noms del sistema 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 el missatge prové del mètode genèric ') genC.Show (321) genC.Show (' H ')}}}

// Sortida:

Aquest missatge prové del mètode genèric
321
H

Delegats

El Delegat fa de referència al mètode. Bàsicament és el mateix que un punter de funció en C i C ++, però molt millor i segur per a tipus. El delegat a mètode estàtic encapsula només el mètode. Mentre que el delegat al instància mètode encapsula tant el mètode com la instància. El millor ús de delegat és utilitzar com a esdeveniment.

Exemple:

utilitzant el sistema delegat int Calculadora (int n) classe pública Edureka {número int estàtic = 25 int estàtic públic afegir (int n) {número = número + n número de retorn} públic estàtic mul (int n) {número = número * n retorn number} public static int getNumber () {return number} public static void Main (string [] args) {Calculadora c1 = nova Calculadora (afegir) Calculadora c2 = nova Calculadora (mul) c1 (20) Console.WriteLine ('Després de la calculadora un delegat, el número nou és: '+ getNumber ()) c2 (3) Console.WriteLine (' Després del delegat de la calculadora dos, el número nou és: '+ getNumber ())}}

// Sortida:

Després de la calculadora un delegat, el nou número és: 45
Després del delegat de la calculadora dos, el nou número és: 135

Reflexió

La reflexió és necessària per obtenir les metadades en temps d'execució. La referència està disponible a Sistema.Reflexió espai de noms. Requereix les classes següents per executar-se.

  • Tipus
  • Informació del membre
  • ConstructorInfo
  • MethodInfo
  • FieldInfo
  • PropertyInfo
  • TypeInfo
  • Informació de l’esdeveniment
  • Mòdul
  • muntatge
  • Nom de l'Assemblea
  • Punter

Tipus de classe

La classe de tipus C # representa declaracions de tipus per a tipus de classe, tipus d'interfície, tipus d'enumeració, tipus de matriu i tipus de valor

Escriviu Propietats

A continuació s’esmenta una llista de propietats importants de les classes de tipus.

Propietat Descripció
muntatge Obté l'assemblea d'aquest tipus.
AssemblyQualifiedName Obté el nom qualificat de Assembly per a aquest tipus.
Atributs Obté els atributs associats al tipus.
BaseType Obté el tipus base o pare.
Nom complet Obté el nom complet del tipus.
És abstracte s’utilitza per comprovar si el tipus és abstracte.
IsArray s’utilitza per comprovar si el tipus és Array.
IsClass s’utilitza per comprovar si el tipus és de classe.
IsEnum s’utilitza per comprovar si el tipus és Enum.
IsInterface s’utilitza per comprovar si el tipus és Interfície.
IsNested s’utilitza per comprovar si el tipus està imbricat.
ÉsPrimitiu s’utilitza per comprovar si el tipus és primitiu.
IsPointer s’utilitza per comprovar si el tipus és Punter.
No és públic s’utilitza per comprovar si el tipus no és públic.
ÉsPúblic s’utilitza per comprovar si el tipus és públic.
Està segellat s’utilitza per comprovar si el tipus està Segellat.
Es pot serialitzar s’utilitza per comprovar si el tipus és serialitzable.
Tipus de membre s'utilitza per comprovar si el tipus és de tipus membre de tipus imbricat.
Mòdul Obté el mòdul del tipus.
Nom Obté el nom del tipus.
Espai de noms Obté l'espai de noms del tipus.
Propietat Descripció
GetConstructors () Retorna tots els constructors públics del tipus.
GetConstructors (BindingFlags) Retorna tots els constructors del tipus amb BindingFlags especificats.
GetFields () Retorna tots els camps públics del tipus.
GetFields (BindingFlags) Retorna tots els constructors públics del tipus amb BindingFlags especificats.
GetMembers () Retorna tots els membres públics del tipus.
GetMembers (BindingFlags) Retorna tots els membres del tipus amb BindingFlags especificats.
GetMethods () Retorna tots els mètodes públics del tipus.
GetMethods (BindingFlags) Retorna tots els mètodes del tipus amb BindingFlags especificats.
GetProperties () Retorna totes les propietats públiques del tipus.
GetProperties (BindingFlags) Retorna totes les propietats del tipus amb BindingFlags especificats.
GetType () Obté el tipus actual.
GetType (cadena) Obté el tipus del nom donat.

Exemples de reflexió:

Obtén tipus

Exemple:

utilitzant el sistema de classe pública GetType {public static void Main () {int a = 10 Type type = a.GetType () Console.WriteLine (type)}}

// Sortida:

System.Int32

Aconsegueix muntatge

Exemple:

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

// Sortida:

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

Informació del tipus d’impressió

Exemple:

utilitzant System mitjançant 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)}}

// Sortida:

És cert
Fals
Fals

Constructors d'impressió

Exemple:

utilitzant System mitjançant 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)}}}

// Sortida:

Constructors del tipus System.String ...
Void .ctor (Char [])
Void .ctor (Char [], Int32, Int32)
Void .ctor (Char *)
Void .ctor (Char *, Int32, Int32)
Void .ctor (SByte *)
Void .ctor (SByte *, Int32, Int32)
Void .ctor (SByte *, Int32, Int32, System.Text.Encoding)
Void .ctor (Char, Int32)
Void .ctor (System.ReadOnlySpan`1 [System.Char])

Mètodes d'impressió

Exemple:

utilitzant System mitjançant 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)}}}

// Sortida:

Mètodes del tipus System.String ...
System.String Replace (System.String, System.String)
System.String [] Split (Char, System.StringSplitOptions)
System.String [] Dividir (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) ......

Camps d'impressió

Exemple:

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

// Sortida:

Camps del tipus System.String ...
System.String buit

Ara anem a alguns conceptes avançats de programació de C #

Conceptes avançats de C #

Funció anònima

Es diu la funció que no té un nom específic Anònim Funcions. Hi ha dos tipus de funcions anònimes disponibles a C #

  • Expressions Lambda
  • Mètodes anònims

Exemple:

utilitzant l’espai de noms del 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)}}}

// Sortida:

Quadrat: 625

Mètodes anònims

El mètode anònim proporciona la mateixa funcionalitat que expressió lambda, tret que ens permet ignorar la llista de paràmetres.

Exemple:

utilitzant l’espai de noms del sistema AnonymousMethods {class Program {public delegate void AnonymousFun () static void Main (string [] args) {AnonymousFun fun = delegate () {Console.WriteLine ('This is anonymous function')} fun ()}}}

// Sortida:

Aquesta és una funció anònima

Múltiples fils

Multithreading és un procés on es creen i s’assignen múltiples fils per a diferents tasques. això estalvia temps executant diversos treballs alhora. La classe multithreading està disponible a Sistema espai de noms.

System.Threading Espai de noms

El Sistema l'espai de noms conté classes i interfícies per facilitar el multi-threading. Proporciona classes per sincronitzar el recurs de fil. A continuació es dóna una llista de les classes més utilitzades:

  • Fil
  • Mutex
  • Temporitzador
  • Monitor
  • Semàfor
  • Fil local
  • ThreadPool
  • Volàtil

Procés i fil

El procés és realment i aplicació i es considera que és un pes pesat component. D’altra banda, el fil és únic mòdul de tota l'aplicació. És lleuger en comparació amb el procés

El cicle de vida d’un fil

Cada fil té un cicle de vida. El cicle de vida del fil es defineix a la classe System.Threading.Thread. Les següents són les etapes del cicle de vida de qualsevol fil.

  • Sense iniciar
  • Runnable (llest per executar)
  • Córrer
  • No executable
  • Mort

La classe Thread proporciona les següents propietats i mètodes de la manera següent.

Propietats del fil

Propietat Descripció
Fil actual retorna la instància del fil en curs.
Està viu comprova si el fil actual està viu o no.
IsBackground Per obtenir / establir el valor del fil actual es troba en segon pla o no.
ManagedThreadId s'utilitza per obtenir l'identificador únic del fil gestionat actualment.
Nom s'utilitza per obtenir o establir el nom del fil actual.
Prioritat s'utilitza per obtenir o establir la prioritat del fil actual.
ThreadState s’utilitza per retornar un valor que representa l’estat del fil.

Mètodes de fil

Mètode Descripció
Avortament () s'utilitza per acabar el fil. Planteja ThreadAbortException.
Interrompre () s'utilitza per interrompre un fil que es troba en estat WaitSleepJoin.
Uneix-te () s'utilitza per bloquejar tots els fils de trucada fins que finalitza aquest fil.
ResetAbort () s’utilitza per cancel·lar la sol·licitud d’anul·lació del fil actual.
Resum() s'utilitza per reprendre el fil suspès. Està obsolet.
Dormir (Int32) s'utilitza per suspendre el fil actual durant els mil·lisegons especificats.
Començar() canvia l'estat actual del fil a Runnable.
Suspendre () suspèn el fil actual si no se suspèn. Està obsolet.
Rendiment () s'utilitza per cedir l'execució del fil actual a un altre fil.

Exemple de fil principal

utilitzant System utilitzant System.Threading classe pública Edureka {public static void Main (string [] args) {Fil t = Thread.CurrentThread t.Name = 'MainThread' Console.WriteLine (t.Name)}}

// Sortida:

Fil principal

Manipulació d’excepcions

El excepció és un error generat pel programa en el seu temps d'execució. Realitzem Exception-Handling per tal que el nostre programa sigui lliure d’excepcions.

Excepció Descripció
System.DivideByZeroException Error generat dividint un nombre amb zero.
System.NullReferenceException gestiona l'error generat fent referència a l'objecte nul.
System.InvalidCastException gestiona l'error generat per la tipografia no vàlida.
System.IO.IOException gestiona els errors d'entrada / sortida.
System.FieldAccessException Error generat per accés privat / protegit no vàlid.

A C #, fem servir quatre paraules clau per obtenir resultats tractament d'excepcions:

  • provar
  • atrapar
  • finalment, i
  • llançar
Exemple:
utilitzant System public class EdurekExample {public static void Main (string [] args) {try {int a = 10 int b = 0 int x = a / b} catch (Excepció e) {Console.WriteLine (e)} Console.WriteLine ('Aquest missatge és del bloc de captures')}}

// Sortida:

System.DivideByZeroException: s'ha intentat dividir per zero.
a ExExaEdurekample.Main (String [] args) a F: C # Tutorial C # ProgramsConsoleApp1ConsoleApp1Program.cs: línia 10
Aquest missatge prové del bloc de captures

Exemple d'excepció personalitzada

utilitzant la classe pública del sistema InvalidAgeException: Excepció {public InvalidAgeException (missatge de cadena): base (missatge) {}} classe pública Personalitzada {valid void estàtic (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.') } } 

// Sortida:

InvalidAgeException: s’espera que l’edat sigui superior a 18 anys
a Customized.validate (edat Int32) a F: C # Tutorial C # ProgramsConsoleApp1ConsoleApp1Program.cs: línia 18
a Customized.Main (String [] args) a F: C # Tutorial C # ProgramsConsoleApp1ConsoleApp1Program.cs: línia 23
El bloc de captures s'està executant ara.

Finalment exemple de bloc

utilitzant System public class FinalExecption {public static void Main (string [] args) {try {int a = 10 int b = 0 int x = a / b} catch (Exception e) {Console.WriteLine (e)} finalment {Console .WriteLine ('Finalment s'executa el bloc')} Console.WriteLine ('S'ha executat el bloc de captures')}}

// Sortida:

System.DivideByZeroException: s'ha intentat dividir per zero.
a FinalExecption.Main (String [] args) a F: C # Tutorial C # ProgramsConsoleApp1ConsoleApp1Program.cs: línia 10
Finalment s'executa el bloc
S'executa el bloc de captures

Signatura d’excepció del sistema

[SerializableAttribute] [ComVisibleAttribute (true)] classe pública SystemException: Exception

Constructors d’excepcions del sistema

constructor Descripció
SystemException () S'utilitza per inicialitzar una nova instància de la classe SystemException.
SystemException

(SerializationInfo, StreamingContext)

S'utilitza per inicialitzar una nova instància de la classe SystemException amb dades serialitzades.
SystemException (cadena) S'utilitza per inicialitzar una nova instància de la classe SystemException amb un missatge d'error especificat.
SystemException (cadena, excepció) S'utilitza per inicialitzar una nova instància de la classe SystemException amb un missatge d'error especificat i una referència a l'excepció interna que és la causa d'aquesta excepció.

Propietats d’excepció del sistema

Propietat Descripció
Dades S'utilitza per obtenir una col·lecció de parells clau / valor que proporcionen informació addicional definida per l'usuari sobre l'excepció.
HelpLink S'utilitza per obtenir o establir un enllaç al fitxer d'ajuda associat a aquesta excepció.
Resultat HR S'utilitza per obtenir o establir HRESULT, un valor numèric codificat que s'assigna a una excepció específica.
InnerException S'utilitza per obtenir la instància d'Exception que ha provocat l'excepció actual.
Missatge S'utilitza per obtenir un missatge que descriu l'excepció actual.
Font S'utilitza per obtenir o establir el nom de l'aplicació que causa l'error.
StackTrace S'utilitza per obtenir una representació de cadenes dels marcs immediats a la pila de trucades.
Lloc objectiu S'utilitza per obtenir el mètode que genera l'excepció actual.

Mètodes d’excepció del sistema

Mètodes Descripció
Igual (objecte) S'utilitza per comprovar que l'objecte especificat és igual o no a l'objecte actual.
Finalitzar () S'utilitza per alliberar recursos i realitzar operacions de neteja.
GetBaseException () S'utilitza per obtenir una excepció root.
GetHashCode () S'utilitza per obtenir el codi hash.
GetObjectData

(SerializationInfo, StreamingContext)

S'utilitza per obtenir dades d'objectes.
GetType () S'utilitza per obtenir el tipus d'execució de la instància actual.
MemberwiseClone () S'utilitza per crear una còpia superficial de l'objecte actual.
ToString () S'utilitza per crear i retornar una representació de cadena de l'excepció actual.

Exemple d’excepció del sistema

utilitzant l’espai de noms del sistema CSharpProgram {class SystemExceptionExample {static void Main (string [] args) {try {int [] arr = new int [5] arr [10] = 25} catch (SystemException e) {Console.WriteLine (e)} }}}

// Sortida:

System.IndexOutOfRangeException: l’índex estava fora dels límits de la matriu.
a CSharpProgram.SystemExceptionExample.Main (String [] args) a F: Tutorial C # C # ProgramsConsoleApp1ConsoleApp1Program.cs: línia 11

Sincronització

La sincronització pot ser una tècnica que permet que només un fil pugui accedir al recurs durant un temps concret. Cap fil alternatiu s'interromprà fins que el fil designat finalitzi la seva tasca.

En el programa multithreading, es permeten els filsper accedir a qualsevol recurs per alexecució especificadatemps. Els fils comparteixen recursos i s’executen de manera asíncrona. Accés a recursos compartits (dades)pot ser una tasca importantque en generalpodria aturar-seel sistema.tenim tendència a influir-hicreant fils de manera síncrona.

Exemple sense sincronització

utilitzant System mitjançant 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() } } 

// Sortida:

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

Exemple amb sincronització

utilitzant System mitjançant 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() } } 

// Sortida:

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

Noves característiques

Microsoft ha afegit moltes funcions més recents al llenguatge C #, algunes d’elles es mencionen a continuació.

C # 6.0

  • Utilitzant directives estàtiques
  • Filtres d'excepció
  • Esperar en blocs de captura / finalment
  • Inicialitzadors de propietats automàtiques
  • Valors predeterminats per a propietats només getter
  • Membres amb cos d'expressió
  • Propagador nul
  • Interpolació de cadenes
  • Nom de l'operador
  • Inicialitzador del diccionari
  • Compilador com a servei (Roslyn)

C # 7.0

  • Coincidència de patrons
  • Tuples
  • Desconstrucció
  • Funcions locals
  • Separador de dígits
  • Literals binaris
  • Torna Ref i locals
  • Constructors i finalitzadors amb cos d'expressió
  • Getters i seters amb cos d'expressió
  • Variables fora
  • Tipus de retorn asíncron generalitzats

C # 7.1

  • Principal asíncron
  • Expressions per defecte

Preguntes de l'entrevista basades en C #

Les importants preguntes de l'entrevista basades en el llenguatge de programació C # es poden trobar en aquesta actualització .

Amb això, arribem al final d’aquest article sobre “Tutorial C #”. Espero que hagueu entès la importància de les estructures de dades, la sintaxi, la funcionalitat i les operacions que s’utilitzen. Ara que ja heu entès els conceptes bàsics de la programació en C # a través d’aixòC # Tutorial, consulteu el formació impartida per Edureka en moltes tecnologies com Java, Primavera i moltsa més, una empresa d 'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món pregunta per a nosaltres? Esmenta-ho a la secció de comentaris d’aquest bloc “Tutorial C #” i et respondrem el més aviat possible.