Tutorial de C #: os fundamentos de que você precisa para dominar C #



Este artigo sobre o tutorial de C # o ajudará com um conhecimento detalhado sobre os fundamentos do C # junto com exemplos em tempo real para um melhor entendimento.

C # é uma linguagem de programação robusta e multifacetada desenvolvida pela Microsoft Corporation no ano 2000 como um competidor mortal do Java. É a mais popular e a linguagem de programação dominante quando se trata de desenvolvimento para web e de aplicativos de desktop.

Neste tutorial em C #, aprenderemos os seguintes conceitos.





C # Basics

Introdução à linguagem de programação C #

No início dos anos 90, Java era a linguagem de programação líder para desenvolvimento web, desenvolvimento de aplicativos de desktop e muitos outros campos. A Microsoft queria criar um concorrente com muitos recursos avançados que podem deixar o Java para trás.



C#-Tutorial-hejlsberg_bio

Foi no ano de 2000, Anders Hejlsberg e sua equipe da Microsoft teve a ideia de C # popularmente chamado de C-Sharp. Esta iniciativa foi aprovada pela International Standards Organization (PRINCIPAL) e a European Computer Manufacturers Association (ECMA). e, finalmente, The C # entra no mundo do desenvolvimento de software.

Recursos da linguagem de programação C #



  • Linguagem de programação orientada a objetos

A abordagem de Programação Orientada a Objetos é o que torna o C # afiado para ser a linguagem de programação mais amigável ao programador e fácil de desenvolver e manter.

  • Linguagem de tipo seguro

O significado de Type-Safe é que o compilador terá acesso apenas ao local da memória que tem permissão para executar. Este recurso melhora a segurança do código a um nível exponencial.

  • Interoperabilidade

O recurso de interoperabilidade torna o C # capaz o suficiente para fazer tudo o que é nativo do C ++ de uma forma mais eficiente que pode superar o próprio C ++.

  • Biblioteca Rica

C # fornece acesso a vários números de bibliotecas embutidas que fornecem funcionalidades pré-programadas para diminuir o tempo gasto no processo de desenvolvimento.

  • Escalável e atualizável

C # foi projetado para ser superior entre as outras linguagens de programação. Por isso, está sempre aberto a atualizações e se mantém altamente escalonável com seus recursos.

java mudar duplo para int
  • Orientado a componentes

Os desenvolvedores da Microsoft usaram a abordagem baseada em componentes para desenvolver C #. Esta é a metodologia de desenvolvimento predominante para manter o C # altamente escalonável e atualizado.

  • Linguagem Estruturada

A abordagem de Programação Estruturada é preferida durante o ciclo de vida de desenvolvimento de software, pois se torna fácil desenvolver, compilar e implantar o software em comparação com a abordagem de programação orientada a procedimentos.

  • Rápido

A programação em C # é mais rápida na compilação e execução em comparação com C ++ e outras linguagens de programação.

Instalação

Está provado que Microsoft Visual Studio é o melhor Editor da classe para Programação C #. Iremos instalar e configurar o Microsoft Visual Studio para executar nossos programas C # seguindo as etapas mencionadas abaixo:

Passo 1 : Baixe o Microsoft Visual Studio

Google para o versão mais recente do Visual Studio e baixe o instalar arquivo em seu sistema local e então corre o arquivo do instalador como um administrador.

Etapa 2: Selecione o pacote de desenvolvimento de desktop .NET

Depois de executar o Instalador, o Editor do Visual Studio será baixado com sucesso em seu sistema local. Mais tarde, uma caixa de diálogo será exibida na tela do seu desktop perguntando ao inimigo um pacote particular você precisa em seu sistema. Aqui, você precisa selecionar o Desenvolvimento de desktop .NET pacote.

Etapa 3: definir o ambiente C #

Uma vez que seus pacotes para Desenvolvimento .NET são baixados, em seguida, outra caixa de diálogo será exibida na tela perguntando sobre o ambiente de desenvolvimento que você está procurando. Aqui, você precisa selecione o ambiente para C #.

Etapa 4: Crie seu primeiro projeto

Assim que o ambiente estiver configurado, você estará pronto para prosseguir. Inicie seu Visual Studio e selecione criar novo projeto opção na caixa de diálogo exibida.

Você será redirecionado para a próxima caixa de diálogo e lá você precisa selecionar a biblioteca de classes como .NET Standard como mostrado abaixo.

Na próxima caixa de diálogo, você será solicitado a Configure seu projeto . Configure-o e agora você está no Editor. Escreva seu primeiro programa e corre isto. A saída será exibida com sucesso no Prompt de comando.

usando a classe de sistema Edureka {static void Main (string [] args) {Console.WriteLine ('Welcome to Edureka !, Happy Learning ..!')}}

//Resultado:

Vamos executar nosso primeiro programa C #.

Estrutura do programa C #

Agora que executamos nosso primeiro programa C #, vamos entender sua estrutura em detalhes. Um programa C # simples possui as seguintes partes.

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

//Resultado:

Bem-vindo ao Edureka !, Happy Learning ..!

  • classe: classe pode ser geralmente definida como um palavra chave que é usado para definir uma classe no programa C #.
  • Edureka: É o nome do Classe. A classe é freqüentemente considerada como um projeto que armazena os membros e métodos relacionados à classe.
  • A Principal: Basicamente é o método primário de todo o Programa C #, atua como a porta de entrada do controle para entrar no programa. Ele é executado antes que qualquer outro método do programa seja executado.
  • vazio: Este segmento do código é designado ao tipo de retorno do método. Pode ser qualquer tipo de dados diferente de nulo. Vazio significa que o método não possui nenhum dado sendo retornado dele.
  • estático: Isto é um palavra chave que diz que os membros de dados declarados são estáticos e uma memória dedicada foi alocada para os membros declarados.
  • String [] args: Assemelha-se aos argumentos da linha de comando que usamos em nosso programa. Enquanto executamos nosso programa, basicamente passamos alguns argumentos, que será aceito pelo programa devido a esta declaração.
  • System.Console.WriteLine (“Bem-vindo ao Edureka !, Happy Learning ..!”) Aqui, Sistema é o namespace. O consoleé essa a categoria delineadano namespace do sistema. o WriteLine () é esse oestáticotécnicado consolecategoria que é empregada para escrevero texto no console.

Agora, vamos aprender os tipos de dados disponíveis em C #.

Tipos de dados

Os tipos de dados em C # são divididos em três categorias descritas a seguir.

Tipos de dados de valor

o Tipos de dados de valor estão localizados no System.ValueType Biblioteca e estão sempre prontos para serem acessados ​​diretamente e as variáveis ​​podem ser atribuídas diretamente a um determinado valor. Os tipos de dados de valor são classificados em dois tipos, conforme mostrado abaixo:

  • Tipos de dados predefinidos
  • Tipos de dados definidos pelo usuário

Tipos de dados predefinidos: Estes são os que normalmente usamos na nossa programação do dia a dia. Esses tipos de dados são predefinidos pelos desenvolvedores de linguagem e são mantidos prontos para uso pelos programadores.

Exemplo:

int, float, char, short double, etc.

Tipos de dados definidos pelo usuário: Existem situações em que podemos precisar armazenar valores diferentes de tipos de dados em uma única variável. Nestes casos, o Tipos de dados predefinidos não são apenas o suficiente. Usuário definido Os tipos de dados são como tipos de dados personalizáveis ​​para o usuário.

Exemplo: Estrutura, Enum

Tipo de dados Alcance da memória alocada Tamanho da memória
char assinado -128 a 127 1 byte
caracter não identifcado 0 a 127 1 byte
Caracteres -128 a 127 1 byte
curto assinado -32.768 a 32.767 2 bytes
curto sem sinal 0 a 65.535 2 bytes
curto -32.768 a 32.767 2 bytes
int assinado -2.147.483.648 a -2.147.483.647 4 bytes
int sem sinal 0 a 4.294.967.295 4 bytes
int -2.147.483.648 a -2.147.483.647 4 bytes
assinado por muito tempo -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 8 bytes
longo sem sinal 0 a 18.446.744.073.709.551.615 8 bytes
longo -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 8 bytes
flutuador 1,5 * 10-45 - 3,4 * 1038, (precisão de 7 dígitos) 4 bytes
em dobro 5,0 * 10-324 - 1,7 * 10308, (precisão de 15 dígitos) 8 bytes
decimal -7,9 * 10-28 - 7,9 * 1028, (precisão de 28 dígitos) 16 bytes


Tipo de dados do ponteiro

Tipo de ponteiro é um tipo de dados simples. Sua funcionalidade é completamente semelhante aos ponteiros em C. Eles são projetados para armazenar o endereço de outro ponteiro.

float * ptr

Tipos de dados de referência

O nome é autoexplicativo. o Tipos de dados de referência na verdade, não armazenam as variáveis; em vez disso, eles armazenam o valor de referência para aquela variável específica. Em outras palavras, eles armazenam o endereço da variável real.

As Variáveis ​​de Referência são classificadas em três tipos diferentes, conforme mencionado abaixo:

  • Tipo de objeto

O tipo de dados do objeto está disponível no System.Object Classe.O objetotipospode seratribuído aovalores deos outros tipos,referênciatipos, predefinido, definido pelo usuáriotipos. Mas depoistarefavalores, requer tipo conversão.

objeto abc abc = 50 // isso é chamado de boxe
  • Tipo Dinâmico

Variáveis ​​de tipo dinâmico são projetadas para armazenar quase todos os tipos de valores. É chamado de Tipo Dinâmico porque a verificação de tipo dos valores ocorre em tempo de execução

dinâmico x = 10
  • Tipo de corda

O tipo de string está disponível em System.String classe. O tipo de string é projetado para armazenar literais de string. Os literais de string são armazenados em duas formas emduas formas

    • citado
    • @quoted.
String S = 'Edureka'
  • o @quoted literal de string parece
@ 'Edureka'

Agora vamos entender as variáveis.

Variáveis

Variáveis ​​são os nomes atribuídos à localização da memória que armazenam certos dados fornecidos pelo usuário e esses dados são facilmente acessíveis usando o nome da variável. Existem cinco tipos de variáveis ​​disponíveis em C #

Tipo Exemplo
Nulo Dados nulos
boleano Verdadeiro e falso
Inteiro Int, Char, Byte, Curto, Longo
Flutuador Float e Double
Decimal Decimal

Exemplo:

int a, b double x float p char abc

Regras a serem seguidas para declarar variáveis ​​em C #

  • Uma variável pode incluir alfabetos, dígitos e sublinhados.
  • O nome de uma variável só pode começar com um alfabeto ou sublinhado.
  • As variáveis ​​não podem começar com um dígito ou caractere especial.
  • Espaços em branco não são permitidos entre o nome da variável.
  • Palavras-chave reservadas não podem ser usadas como nomes de variáveis.

Operadores

Um Operador pode ser definido como um símbolo especial que explica o computador para executar uma determinada Matemática é uma Operação Lógica sobre um conjunto de variáveis. C # inclui uma variedade de Operadores mencionados abaixo.

  • Operadores aritméticos
  • Operadores Relacionais
  • Operadores lógicos
  • Operadores bit a bit
  • Operadores de atribuição

Operadores aritméticos

Operador Exemplo Descrição
+ A + B Adiciona dois operandos
- A - B Subtrai dois operandos
* A * B Múltiplos dois operandos
/ A / B Divide dois operandos
% A% B O restante dos dois operandos
++ A ++ Operação de incremento
- PARA- Operação de redução

Operadores Relacionais

Operador Exemplo Descrição
== A == B Verdadeiro, se ambos os operandos forem iguais, Senão False
! = A! = B Verdadeiro, se ambos os operandos não forem iguais, Senão False
> A> B Verdadeiro, se A for Maior, Caso contrário, será falso
< PARA Verdadeiro, se B for maior, senão falso
> = A> = B Verdadeiro, se A for maior ou igual, senão falso
<= PARA<= B Verdadeiro, id B é maior igual, caso contrário, falso

Operadores lógicos

Operador Exemplo Descrição
&& A && B Verdadeiro, se ambos os operandos forem verdadeiros, caso contrário, será falso
|| A || B Verdadeiro, se um dos operandos for verdadeiro, senão False
! UMA ! B Reverte o estado lógico do operando

Operadores bit a bit

PARA B A e 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 Exemplo Descrição
~ (~ A) O operador de complemento do binário é unário e tem o efeito de 'virar' bits.
<< PARA<<2 Operador binário de deslocamento à esquerda. O valor dos operandos à esquerda é movido para a esquerda pelo número de bits especificado pelo operando à direita.
>> A >> 2 Operador binário de deslocamento à direita. O valor dos operandos à esquerda é movido para a direita pelo número de bits especificado pelo operando à direita.

Operadores de atribuição

Operador Exemplo Descrição
= A = B + C A = B + C, B + C é atribuído a A
+ = A + = B A = A + B, A + B é atribuído a A
- = A - = B A = A-B, A-B é atribuído a A
* = A - = B A = A * B, A * B é atribuído a A
/ = A / = B A = A / B, A / B é atribuído a A
% = A% = B A = A% B, A% B é atribuído a A
<<= PARA<<= 2 Shift à esquerda e operador de atribuição
>> = A >> = 2 Operador de mudança e atribuição à direita
& = A & = 2 Operador bit a bit e atribuição
^ = A ^ = 2 Operador de atribuição e exclusivo bit a bit
| = A! = 2 Operador Bitwise Inclusive e Atribuição

rotações

PARA ciclo instrução é usada para executar um bloco de instruções repetidamente até que uma condição particular seja satisfeita. A linguagem C # consiste nas seguintes instruções de loop.

  • For Loop
  • While Loop
  • Loop Do While

For Loop

o para loop é usado para executar um segmento de código específico várias vezes até que a condição fornecida seja satisfeita.

Sintaxe

para (incremento / decremento da condição de inicialização) {// segmento de código}

FlowChart:

Exemplo:

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

//Resultado:

1
2
3
4
5

While Loop

o Loop while é usado para executar um segmento de código várias vezes até que uma condição específica seja satisfeita.

Sintaxe

while (condição) {// código a ser executado}

FlowChart:

Exemplo:

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

//Resultado:

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

Loop Do While

O loop do while é completamente semelhante ao loop While, mas a única diferença é que a condição é colocada no final do loop. Portanto, o loop é executado pelo menos uma vez.

Sintaxe

faça {// código a ser executado} enquanto (condição)

FlowChart:

Exemplo:

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, produto) i ++} enquanto (i<= 10) } } } 

//Resultado:

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

Declarações condicionais são usados ​​para executar declaração ou grupo de afirmações com base em alguma condição. Se o doença é verdade então Declarações C # são executados caso contrário o próximo declaração será executado.

Os diferentes tipos de declarações condicionais na linguagem C ++ são os seguintes:

  1. Declaração If
  2. Declaração If-Else
  3. Instrução If-else aninhada
  4. If-Else If ladder
  5. Declaração de mudança

Declaração If

O solteiro E se declaração na linguagem C # é usada para executar o código se uma condição for verdadeira. Também é chamado de instrução de seleção unilateral.

Sintaxe

if (boolean-expression) {// instruções executadas se boolean-expression for true}

FlowChart:

Exemplo:

usando o namespace do 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.') } } } 

//Resultado:

2 é menor que 5
Esta instrução é sempre executada.

Declaração If-Else

o if-else declaração na linguagem C é usada para executar o código se a condição for verdadeira ou falsa. Também é chamado de instrução de seleção bidirecional.

Sintaxe

if (boolean-expression) {// instruções executadas se boolean-expression for true} else {// instruções executadas se boolean-expression for false}

FlowChart:

Exemplo:

usando o namespace do 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.') } } } 

//Resultado:

12 é maior ou igual a 5
Esta instrução é sempre executada.

Instrução If-else aninhada

O aninhado if-else declaração é usada quando um programa requer mais de uma expressão de teste. Também é chamado de instrução de seleção de várias vias. Quando uma série de decisões está envolvida em uma declaração, usamos if-else declaração na forma aninhada.

Sintaxe

if (boolean-expression) {if (nested-expression-1) {// código a ser executado} else {// código a ser executado}} else {if (nested-expression-2) {// código a ser executado } else {// código a ser executado}}

FlowChart:

Exemplo:

usando o namespace do sistema Condicional {class Nested {public static void Main (string [] args) {int first = 7, second = -23, third = 13 if (first & gt second) {if (first

//Resultado:

13 é o maior

Else-if Ladder

o if-else-if declaração é usada para executar um código de várias condições. Também é chamada de instrução de decisão de múltiplos caminhos. É uma cadeia de instruções if..else em que cada instrução if está associada à instrução else if e a última seria uma instrução else.

Sintaxe

if (condição1) {// código a ser executado se a condição1 for verdadeira} else if (condição2) {// código a ser executado se a condição2 for verdadeira} else if (condição3) {// código a ser executado se a condição3 for verdadeira} ... else {// código a ser executado se todas as condições forem falsas}

FlowChart:

Exemplo:

usando a classe de sistema Edureka {public static void Main (String [] args) {int i = 20 if (i == 10) Console.WriteLine ('i é 10') else if (i == 15) Console.WriteLine (' i é 15 ') else if (i == 20) Console.WriteLine (' i é 20 ') else Console.WriteLine (' i não está presente ')}}

//Resultado:

eu tenho 20

Declaração de mudança

Interruptor declaração atua como um substituto para uma longa escada if-else-if que é usada para testar uma lista de casos. Uma instrução switch contém um ou mais rótulos case que são testados em relação à expressão switch. Quando a expressão corresponder a um caso, as instruções associadas a esse caso serão executadas.

Sintaxe

switch (variável / expressão) {case value1: // Instruções executadas if expression (or variable) = value1 break case value2: // Instruções executadas if expression (or variable) = value1 break ... ... ... .. . ... ... default: // Instruções executadas se nenhum caso corresponder}

FlowChart:

Exemplo:

usando o namespace do sistema Condicional {class SwitchCase {public static void Main (string [] args) {char ch Console.WriteLine ('Digite um alfabeto') 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}}}}

//Resultado:

Digite um alfabeto
é
Vogal

Cordas

Corda Datatype é membro de System.String Classe. É capaz de armazenar dados de tipo de caractere. Podemos realizar várias operações em Stings, comoconcatenação, comparação, obtenção de substring, pesquisa, corte, substituição e muito mais.

A analogia de corda e corda

Em C # Corda e corda são equivalentes. A palavra string é um palavra chave e atua como o System.String classe. Podemos usar qualquer uma das versões para declarar strings.

Sintaxe:

string s1 = 'Edureka' // criando string usando a palavra-chave string String s2 = 'Boa aprendizagem' // criando string usando a classe String

Exemplo:

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

//Resultado:

Edureka
Tutorial Csharp

Métodos de string em C #

Método Descrição
Clone() Usado para retornar uma referência a esta instância de String.
Comparar (string, string) Usado para comparar dois objetos String especificados.
Concat (string, string) Concatene duas instâncias especificadas de String.
Contém (String) Retorna um valor indicando uma substring especificada
Copiar (String) Usado para criar uma nova instância de String com o mesmo valor
CopyTo (Int, Char [], Int, Int) Copia caracteres de uma posição especificada
Equals (String, String) Determina que dois objetos String têm o mesmo valor.
Formato (string, objeto) Substitua um ou mais itens de formato em uma string especificada
IndexOf (String) Informa o índice baseado em zero da primeira ocorrência
Insert (Int32, String) Retorna uma nova string na qual uma string é inserida em um índice.
IsInterned (String) Indica que esta string está na forma C. de normalização Unicode.
IsNullOrEmpty (String) Indica que a string especificada é nula ou vazia.
IsNullOrWhiteSpace (String) Usado para indicar se uma string especificada é nula, vazia,
Join (String, String []) Usado para concatenar todos os elementos de uma matriz de string
LastIndexOf (Char) Informa a posição do índice baseado em zero do último caractere
LastIndexOfAny (Char []) Informa a posição do índice baseado em zero do último caractere
Remover (Int32) Retorna uma nova string em que todos os caracteres
Substituir (string, string) Retorna uma nova string em que todas as ocorrências de uma string
Dividir (Char []) É usado para dividir uma string em substrings
StartsWith (String) É usado para verificar se o início desta string
Substring (Int32) Ele é usado para recuperar uma substring desta instância.
ToCharArray () Copia os caracteres nesta instância para uma matriz Unicode.
Para sequenciar() É usado para retornar a instância de String.
Aparar() Apara a corda


Arrays

Semelhante a outras linguagens de programação, C # possui matrizes. Matrizes são estruturas de dados simples projetadas para armazenar o mesmo tipo de dados de elementos em um local de memória contíguo.

C # oferece suporte aos seguintes tipos de Array.

  • Matriz unidimensional
  • Matriz Multidimensional
  • Matriz Jagged

Matriz unidimensional

O array de dimensão única armazena elementos na forma de uma única linha.

Sintaxe

int [] arr = new int [5] // criando matriz

Exemplo:

usando 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 para (int i = 0 i 

//Resultado:

10
vinte
30
40
cinquenta

Matriz Multidimensional

Array multidimensional armazena elementos na forma de dimensões múltiplas, como uma matriz e um cubo, etc.

Sintaxe

int val = a [2,3]

Exemplo:

usando o namespace do 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 para (i = 0 i<5 i++) { for (j = 0 j < 2 j++) { Console.WriteLine('a[{0},{1}] = {2}', i, j, a[i, j]) } } Console.ReadKey() } } } 

//Resultado:

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

Matriz Jagged

Jagged Array é simplesmente um array de arrays.

Exemplo:

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

//Resultado:

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

Coleções

A coleção pode ser considerada simplesmente como um grupo de objetos coletados em conjunto de modo a aplicar algumas funções aos dados coletados. As operações que uma vez que ca possivelmente executam em uma coleção são,

  • objeto de loja
  • atualizar objeto
  • deletar objeto
  • recuperar objeto
  • objeto de pesquisa, e
  • classificar objeto

Tipos de coleções

Existem três possibilidades diferentes de trabalhar com coleções. Os três namespaces são mencionados abaixo:

  • System.Collections.Generic Aulas
  • System.Collections Aulas
  • System.Collections.Concurrent Aulas

A classe System.Collections.Generic tem as seguintes variedades de classes:

  • Lista
  • Pilha
  • Fila
  • LinkedList
  • HashSet
  • SortedSet
  • Dicionário
  • SortedDictionary
  • SortedList

o System.Collections as classes são consideradas classes legadas. eles incluem as seguintes classes.

  • ArrayList
  • Pilha
  • Fila
  • Hashtable

o System.Collections.Concurrent Aulaso namespace fornece classes para operações thread-safe. Agora, vários threads não criarão um problema para acessar os itens da coleção. as classes disponíveis neste são,

  • BlockingCollection
  • ConcurrentBag
  • ConcurrentStack
  • ConcurrentQueue
  • ConcurrentDictionary
  • Partições
  • Partições
  • OrderablePartitioner

Lista

o Lista é considerada uma estrutura de dados disponível em System.Collection.Generics namespace. Ele pode armazenar e buscar elementos. A lista é capaz de armazenar elementos duplicados.

Exemplo:

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') nomes.Adicionar ('Kiran') foreach (nome var nos nomes) {Console.WriteLine (nome)}}}

//Resultado:

Sandhya
Uma corrida
Prasanthe
Kiran

Conjunto de hash

C # HashSetcategoria é frequentemente acostumadaloja,Leve emboraouler componentes. istonãoloja duplicadacomponentes.é urgenteusar HashSet categoriaE sevocê temarmazenarunicamente distintivo componentes . Está encontrado no namespace System.Collections.Generic.

Exemplo:

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

//Resultado:

Sunil
Amar
Pujari
Imran
karan

Conjunto Ordenado

C # SortedSetclasse estão frequentemente acostumadosloja, remover ou ler elementos . Ele mantém a ordem crescente enãoloja duplicadaelementos.é rápidousar SortedSetcategoriaE sevocê temarmazenar distintivo componentes e manter a ordem crescente.Estáencontrado no namespace System.Collections.Generic.

Exemplo:

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

//Resultado:

Anuradha
Kajol
Praveen
Ravi
Sanjay

Pilha

o pilha é uma coleção simples que segue BEIRA ou procedimento de primeiro a entrar, último a sair durante o processamento dos elementos armazenados nele.

Exemplo:

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 ('Depois de Pop, elemento Peek:' + names.Peek ())}}

//Resultado:

Kumar
Rajesh
James
Pooja
Chandan
Elemento Peek: kumar
Pop: kumar
Depois de Pop, elemento Peek: Rajesh

Fila

A fila é completamente semelhante à Pilha, mas a única diferença é que a Fila segue FIFO ou princípio do primeiro a entrar e primeiro a sair durante o processamento dos elementos nele armazenados.

Exemplo:

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 ('Retirar da fila:' + names.Dequeue ()) Console.WriteLine ('Após retirar da fila, Peek elemento:' + names.Peek ())}}

//Resultado:

Srujan
Prajat
John
Feroz
Dia
Elemento Peek: Srujan
Retirar da fila: Srujan
Depois de Dequeue, elemento Peek: Prajat

Lista Ligada

A lista vinculada é uma coleção de memória dinâmica. Os elementos na lista vinculada são armazenados acessando a memória do heap e armazenando os elementos em uma ordem contínua vinculando seus endereços.

Exemplo:

usando System usando 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') names.AddLast ('jay') names.AddFirst ('sai') foreach (var name in names) {Console.WriteLine (name)}}}

//Resultado:

sai
Limites
Uma corrida
Prakash
gaio

Dicionário

Dicionário categoriausa oidéiada tabela de hash. Ele armazena valores ema premissada chave. Contémdistintivochavesunicamente. Dea ajudade chave,nós iremos simplesmentepesquisar outirar elementos.Estáencontrado no namespace System.Collections.Generic.

Exemplo:

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

//Resultado:

1 Shiva
2 Prasad
3 Preetam
4 Roy
5Akash

Dicionário Ordenado

o SortedDictionary categoriausa oProjetoda tabela de hash. Ele armazena valores ema ideiada chave. Contémdistintivochaves e mantém a ordem crescente ema ideiada chave. Dea ajudade chave,nós iremos simplesmentepesquisar outirar elementos.Estáencontrado no namespace System.Collections.Generic.

Exemplo:

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

//Resultado:

1 Shiva
2 Prasad
3 Preetam
4 Roy
5Akash

Lista Classificada

o SortedList éamatriz de pares chave / valor. Ele armazena valores ema premissada chave. SortedListcategoriacontémdistintivochaves e mantém a ordem crescente ema premissada chave. Dea ajudade chave,somos capazes de simplesmentepesquisar ou removerelementos.Estáencontrado em System.Collections.Generic namespace.

Exemplo:

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

//Resultado:

1 Arun
2 Pallavi
3 Vidya
4 Vishal
5Ramesh

Estrutura

A estrutura é um tipo de dados definido pelo usuário projetado para armazenar vários elementos de diferentes tipos de dados. A estrutura é declarada usando a palavra-chave struct.

Exemplo:

usando a estrutura do sistema Livros {título da string pública autor da string pública assunto público int book_id} public class Edureka {public static void Main (string [] args) {Books Book1 Books Book2 Book1.title = 'Programação C #' Book1.author = ' Ramchandra Kumar 'Book1.subject =' Tutorial de programação C ++ 'Book1.book_id = 95908978 Book2.title =' Faturamento de telecomunicações 'Book2.author =' Karan 'Book2.subject =' Tutorial de faturamento de telecomunicações '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 ()}}

//Resultado:

Título do livro 1: Programação C #
Autor do livro 1: Ramchandra Kumar
Livro 1 assunto: Tutorial de programação C ++
Livro 1 book_id: 95908978
Título do livro 2: Faturamento de telecomunicações
Autor do livro 2: Karan
Livro 2 assunto: Tutorial de faturamento de telecomunicações
Livro 2 book_id: 18674900

Funções

A função é definida como um bloco de código do código principal. A função é usada para executar instruções especificadas no bloco de código. Uma função consiste nos seguintes componentes.

  • Nome da função: É um nome distinto usado para fazer uma chamada de função.
  • Tipo de retorno: Ele especifica o tipo de dados do valor de retorno da função.
  • Corpo: Ele contém instruções executáveis.
  • Especificador de acesso: Ele especifica a acessibilidade da função no aplicativo.
  • Parâmetros: É uma lista de argumentos que podemos passar para a função durante a chamada.

Sintaxe

FunctionName () {// corpo da função // declaração de retorno}

Exemplo:

usando o namespace System FunctionExample {class Edureka {public string Show (string message) {Console.WriteLine ('Inside Show Function') mensagem de retorno} static void Main (string [] args) {Edureka program = new Edureka () string message = program .Show ('To Edureka') Console.WriteLine ('Welcome' + mensagem)}}}

//Resultado:

Função Mostrar Dentro
Bem vindo a edureka

As funções podem ser executadas de 3 maneiras diferentes:

  • Chamada por valor
  • Chamada por Referência
  • Parâmetro de Saída

Chamada por valor

Em C #, valor -tipo parametrosestáaquele passeuma réplicado valor original para ofunção em vez dereferência. istonãomodificaro primeiro valor. Aemenda criadapassouvalor nãoErao valor particular.dentro doseguinte exemplo,nós temospassarvalor por toda partealigar.

Exemplo:

using System namespace CallByValue {class Edureka {public void Mostrar (int val) {val * = val Console.WriteLine ('O valor dentro da função show' + val)} static void Main (string [] args) {int val = 50 Edureka program = new Edureka () Console.WriteLine ('Valor antes de chamar a função' + val) program.Show (val) Console.WriteLine ('Valor após chamar a função' + val)}}}

//Resultado:

Valor antes de chamar a função 50
O valor dentro da função show 2500
Valor após chamar a função 50

Chamada por Referência

No método Call by Reference,para ref palavra-chave para passar o argumento como tipo de referência. Ele passa a referência de argumentos para a função em vez de uma cópia do valor original. As mudanças nos valores passados ​​são permanentes e modificar o valor da variável original.

Exemplo:

using System namespace CallByReference {class Edureka {public void Mostrar (ref int val) {val * = val Console.WriteLine ('O valor dentro da função show' + val)} static void Main (string [] args) {int val = 50 Edureka program = new Edureka () Console.WriteLine ('Valor antes de chamar a função' + val) program.Show (ref val) Console.WriteLine ('Valor após chamar a função' + val)}}}

//Resultado:

Valor antes de chamar a função 50
O valor dentro da função show 2500
Valor após chamar a função 2500

Parâmetro de Saída

O parâmetro de saídafornece Fora palavra-chave para passar argumentos como tipo de saída. É como o tipo de referência, exceto que não exige que a variável seja inicializada antes de passar. Devemos usar Fora palavra-chave para passar o argumento como tipo de saída. É útil quando queremos que uma função retorne vários valores.

Exemplo:

using System namespace OutParameter {class Edureka {public void Mostrar (out int val) {int square = 5 val = square val * = val} static void Main (string [] args) {int val = 50 Edureka program = new Edureka () Console.WriteLine ('Valor antes de passar a variável' + val) program.Show (out val) Console.WriteLine ('Valor depois de receber a variável out' + val)}}}

//Resultado:

Valor antes de passar a variável 50

Valordepois de receber a variável de saída 25

Agora vamos passar para a programação orientada a objetos

Programação Orientada a Objetos

Programação orientada a objetos Sistemaé um paradigma de programação baseado no conceito de objetos que contém membros de dados e métodos relacionado a eles. O objetivo principal da programação orientada a objetos é aumentar a flexibilidade e manutenção dos programas

Recursos da programação orientada a objetos:

  • Ele enfatiza mais os dados do que o procedimento.
  • Os programas estão divididos em objetos, facilitando o seu trabalho.
  • As estruturas de dados são projetadas de forma a caracterizar os objetos.
  • Funções que funcionam emos dados de um objeto são colocados juntos na estrutura de dados.
  • Os dados estão ocultos e não podem ser acessados ​​por funções externas sem permissão.
  • A comunicação entre objetos pode ocorrer com a ajuda de funções.
  • Adicionar novos dados e funções tornou-se fácil.
  • Segue a abordagem ascendente no desenho do programa.

Os Paradigmas Orientados a Objetos em C # são os seguintes

Enumeração em C #

Enum ou também chamado de enumeração em C # é usado para armazenar valores constantes sem ter que alterá-los durante toda a execução de um programa C #. istoé usado para armazenar um conjunto de constantes nomeadas, como estação, dias, mês, tamanho, etc.

Exemplo:

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

//Resultado:

Segunda-feira = 0
Sexta = 4

Abordagem de programação orientada a objetos

O estilo de programação orientado a objetos pode ser alcançado seguindo os métodos prescritos abaixo.

Encapsulamento

Encapsulamento é um método para combinar o métodos junto com seu membros de dados.

Exemplo:

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

//Resultado:

Comprimento: 50
Largura: 35
Área: 1750

Abstração

Abstração é um método para ocultar a parte de codificação complexa do usuário, fornecendo-lhe apenas as informações necessárias de que ele precisa.

Exemplo:

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

//Resultado:

desenhando retângulo ...
desenhando círculo ...

Interface

o interface é completamente semelhante ao Abstraction. A funcionalidade de uma interface é ocultar os dados sem importância do usuário e fornecer-lhe os únicos dados importantes de que precisa.

Exemplo:

usando a interface pública do 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 ()}}

//Resultado:

desenhando retângulo ...
desenhando círculo ...

Polimorfismo

Polimorfismoé a combinação de 'poli' + “Se transforma” o que significa muitas formas. É uma palavra grega. Isso significa que o segmento de código pode assumir várias formas. Temos dois tipos de polimorfismo.

  • Polimorfismo de tempo de compilação
  • Polimorfismo de tempo de execução

Exemplo:

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

//Resultado:

branco

Herança

Herança é um processo no qual um objeto adquire todas as propriedades e comportamentos de seu objeto pai automaticamente. Você pode reutilizar, estender ou modificar os atributos e comportamentos definidos em outra classe. a classe que herda os membros de outra classe é chamada classe derivada e a classe cujos membros são herdados é chamada de base classe. A classe derivada é a classe especializada para a classe base.

Exemplo para herança de nível único

using System namespace RectangleApplication {class Rectangle {comprimento duplo protegido protegido largura dupla público Retângulo (duplo l, duplo w) {comprimento = l largura = w} público duplo GetArea () {retorno comprimento * largura} public void Display () {Console. WriteLine ('Comprimento: {0}', comprimento) Console.WriteLine ('Largura: {0}', largura) Console.WriteLine ('Área: {0}', GetArea ())}} classe Mesa: Retângulo {privado double cost public Tabletop (double l, double w): base (l, w) {} public double GetCost () {double 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 () }}}

//Resultado:

Comprimento: 4,5
Largura: 7,5
Área: 33,75
Custo: 2362,5

Exemplo de herança multinível

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} interface pública 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 ('Área total: {0}', Rect.getArea ()) Console.WriteLine ('Total custo de pintura: $ {0} ', Rect.getCost (area)) Console.ReadKey ()}}}

//Resultado:

Área total: 35
Custo total da pintura: $ 2.450

Sobrecarregando

Sobrecarga é uma situação em que temos dois ou membros declarados usando o mesmo nome. A sobrecarga também é possível quando declaramos dois ou mais métodos com o mesmo nome. Vamos verificar exemplos de ambos.

Sobrecarga de membros

Exemplo:

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

//Resultado:

35
60

Sobrecarga de método

Exemplo:

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

//Resultado:

35
33.699997

Substituindo

Substituir é uma situação em que a classe filha define o mesmo método que o pai também está definindo. Vamos entender isso por meio de um pequeno exemplo.

Exemplo:

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 Substituindo {public static void Main () {Dog d = new Dog () d.eat ()}}

//Resultado:

Comer comida

Namespace

o namespace é basicamente usado para lidar com várias classes presentes no programa. O namespace está disponível de diferentes maneiras.

  • System.Console: Aqui o Sistema torna-se o namespace
  • Para acessar a classe de um namespace, precisamos usar namespacename.classname.
  • Podemos usar o usando palavra-chave também.

Exemplo:

using System using First using Second namespace Primeiro {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 ()}}

//Resultado:

Bem vindo a edureka
Aprendizagem feliz

Operações de arquivo

o operações de arquivo disponíveis em C # são os seguintes:

Operação Descrição
BinaryReader Lê dados primitivos de um fluxo binário.
BinaryWriter Grava dados primitivos em formato binário.
BufferedStream Armazenamento temporário para um fluxo de bytes.
Diretório Ajuda na manipulação de uma estrutura de diretório.
DirectoryInfo Usado para executar operações em diretórios.
DriveInfo Fornece informações para as unidades.
Arquivo Ajuda na manipulação de arquivos.
Informações do arquivo Usado para executar operações em arquivos.
FileStream Usado para ler e gravar em qualquer local de um arquivo.
MemoryStream Usado para acesso aleatório a dados transmitidos armazenados na memória.
Caminho Executa operações nas informações do caminho.
StreamReader Usado para ler caracteres de um fluxo de bytes.
StreamWriter É usado para escrever caracteres em um fluxo.
StringReader É usado para leitura de um buffer de string.
StringWriter É usado para escrever em um buffer de string.

FileMode

o FileMode é um enumerador que define vários métodos de abertura de arquivo. Os membros do FileMode Enumerator são descritos a seguir:

  • Acrescentar: Ele abre um arquivo existente e coloca o cursor no final do arquivo ou cria o arquivo se o arquivo não existir.
  • Crio: Ele foi projetado para criar um novo arquivo.
  • Crie um novo: Ele é projetado para especificar ao sistema operacional que deve criar um novo arquivo.
  • Abrir: Ele é projetado para abrir um arquivo existente.
  • OpenOrCreate: Ele é projetado para especificar o sistema operacional que deve abrir um arquivo se ele existir, caso contrário, deve criar um novo arquivo.
  • Truncar: Truncar abre um arquivo existente e trunca seu tamanho para zero bytes.

FileAccess

FileAccess Enumerator é usado para obter acesso a um arquivo específico. Tem os seguintes membros.

  • Ler
  • Escrever
  • Ler escrever

Compartilhamento de arquivo

o Compartilhamento de arquivo Enumerator é usado para compartilhar um arquivo específico. Tem os seguintes membros.

  • Herdável: Inheritable permite que um filehandle passe uma herança para os processos filho.
  • Nenhum: Nenhum recusa o compartilhamento do arquivo atual
  • Ler: Ler permite abrir o arquivo para leitura.
  • Ler escrever: ReadWrite permite abrir o arquivo para leitura e escrita.
  • Escrever: A gravação permite abrir o arquivo para gravação.

Eventos

Um evento é geralmente conhecido como uma ação gerada pelo usuário. Pode ser um clique do mouse e até mesmo uma única tecla do teclado. Da mesma forma, os programas C # também possuem eventos. O gerador do evento é chamado de editor e o receptor do evento é chamado de assinante.

Editor

PARA editor contém a definição do evento e do delegado. o delegado de evento associação é definida neste objeto. UMA editor objeto de classe invoca o evento e é notificado a outros objetos.

Assinante

PARA assinante aceita o evento e fornece um manipulador de eventos. o delegar na classe do editor invoca o método / evento manipulador da classe de assinante.

Exemplo:

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 'Bem-vindo a Edureka . '+ nome de usuário} static void Main (string [] args) {EventBlock obj1 = new EventBlock () string result = obj1.NewEvent (' Happy Learning ') Console.WriteLine (result)}}}

//Resultado:

Bem-vindo ao Edureka. Aprendizagem feliz

Genéricos

Genéricos é um conceito de fornecer aos membros e métodos de uma classe espaços reservados em Tempo de execução. Podemos definir genéricos usando colchetes. Vamos verificar os exemplos a seguir.

Genéricos em uma 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 ('Esta mensagem é de uma classe genérica' ) GenericClass genI = new GenericClass (123) GenericClass getCh = new GenericClass ('E')}}}

//Resultado:

Esta mensagem é da classe genérica
123
É

Genéricos em um método

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 a mensagem é do método genérico ') genC.Show (321) genC.Show (' H ')}}}

//Resultado:

Esta mensagem é do método genérico
321
H

Delegados

o Delegar atua como uma referência para o método. Basicamente, é o mesmo que um ponteiro de função em C e C ++, mas muito melhor e seguro para tipos. O Delegado em método estático encapsula apenas o método. Enquanto o delegado no instância método encapsula o método e a instância. O melhor uso de delegado é como um evento.

Exemplo:

usando System delegate int Calculadora (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) {Calculadora c1 = nova Calculadora (adicionar) Calculadora c2 = nova Calculadora (mul) c1 (20) Console.WriteLine ('Depois da calculadora um delegado, o novo número é: '+ getNumber ()) c2 (3) Console.WriteLine (' Após o delegado da calculadora dois, o novo número é: '+ getNumber ())}}

//Resultado:

Depois de calcular um delegado, o novo número é: 45
Após calculadora dois delegado, o novo número é: 135

Reflexão

O Reflection é necessário para obter os metadados em tempo de execução. A referência está disponível em System.Reflection namespace. Requer as seguintes classes para ser executado.

  • Tipo
  • MemberInfo
  • ConstructorInfo
  • MethodInfo
  • FieldInfo
  • PropertyInfo
  • TypeInfo
  • EventInfo
  • Módulo
  • Montagem
  • AssemblyName
  • Pointer

Classe de tipo

Classe C # Type representa declarações de tipo para tipos de classe, tipos de interface, tipos de enumeração, tipos de array, tipos de valor

Propriedades de tipo

Uma lista de propriedades importantes das classes Type é mencionada a seguir.

Propriedade Descrição
Montagem Obtém o Assembly para este tipo.
AssemblyQualifiedName Obtém o nome qualificado do Assembly para este tipo.
Atributos Obtém os atributos associados ao tipo.
BaseType Obtém o tipo base ou pai.
Nome completo Obtém o nome totalmente qualificado do tipo.
IsAbstract é usado para verificar se o tipo é abstrato.
IsArray é usado para verificar se o tipo é Array.
IsClass é usado para verificar se o tipo é Classe.
IsEnum é usado para verificar se o tipo é Enum.
IsInterface é usado para verificar se o tipo é Interface.
IsNested é usado para verificar se o tipo é aninhado.
IsPrimitive é usado para verificar se o tipo é Primitivo.
IsPointer é usado para verificar se o tipo é Pointer.
IsNotPublic é usado para verificar se o tipo não é Público.
IsPublic é usado para verificar se o tipo é Público.
IsSealed é usado para verificar se o tipo é Selado.
IsSerializable é usado para verificar se o tipo é serializável.
MemberType é usado para verificar se o tipo é o tipo de membro do tipo aninhado.
Módulo Obtém o módulo do tipo.
Nome Obtém o nome do tipo.
Namespace Obtém o namespace do tipo.
Propriedade Descrição
GetConstructors () Retorna todos os construtores públicos para o tipo.
GetConstructors (BindingFlags) Retorna todos os construtores para o tipo com BindingFlags especificado.
GetFields () Retorna todos os campos públicos para o Tipo.
GetFields (BindingFlags) Retorna todos os construtores públicos para o Type com BindingFlags especificados.
GetMembers () Retorna todos os membros públicos do tipo.
GetMembers (BindingFlags) Retorna todos os membros para o tipo com BindingFlags especificado.
GetMethods () Retorna todos os métodos públicos para o Type.
GetMethods (BindingFlags) Retorna todos os métodos para o tipo com BindingFlags especificado.
GetProperties () Retorna todas as propriedades públicas do tipo.
GetProperties (BindingFlags) Retorna todas as propriedades do tipo com BindingFlags especificado.
GetType () Obtém o tipo atual.
GetType (String) Obtém o tipo para o nome fornecido.

Exemplos de reflexão:

Obter tipo

Exemplo:

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

//Resultado:

System.Int32

Obter montagem

Exemplo:

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

//Resultado:

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

Informação de tipo de impressão

Exemplo:

usando System usando 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)}}

//Resultado:

Verdade
Falso
Falso

Construtores de impressão

Exemplo:

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

//Resultado:

Construtores do tipo 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étodos de impressão

Exemplo:

usando System usando 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)}}}

//Resultado:

Métodos do 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) ......

Imprimir Campos

Exemplo:

usando System usando 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)}}}

//Resultado:

Campos do tipo System.String ...
System.String Vazio

Agora, vamos prosseguir para alguns conceitos avançados de programação C #

Conceitos avançados de C #

Função Anônima

A função que não possui um nome específico é chamada Anônimo Funções. Existem dois tipos de funções anônimas disponíveis em C #

  • Expressões Lambda
  • Métodos Anônimos

Exemplo:

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

//Resultado:

Quadrado: 625

Métodos Anônimos

o método anônimo fornece a mesma funcionalidade que um expressão lambda, exceto que nos permite ignorar a lista de parâmetros.

Exemplo:

usando o namespace System AnonymousMethods {class Program {public delegate void AnonymousFun () static void Main (string [] args) {AnonymousFun fun = delegate () {Console.WriteLine ('Esta é uma função anônima')} fun ()}}}

//Resultado:

Esta é uma função anônima

Multi-Threading

Multithreading é um processo em que vários threads são criados e atribuídos a diferentes tarefas. isso economiza tempo executando vários trabalhos ao mesmo tempo. A classe multithreading está disponível em System.Threading namespace.

Namespace System.Threading

o System.Threading namespace contém classes e interfaces para facilitar o multithreading. Ele fornece classes para sincronizar o recurso de thread. Uma lista de classes comumente usadas é fornecida abaixo:

  • Fio
  • Mutex
  • Cronômetro
  • Monitor
  • Semáforo
  • ThreadLocal
  • Grupo de discussão
  • Volátil

Processo e discussão

O processo é realmente e inscrição e é considerado um peso pesado componente. Por outro lado, o tópico é um único módulo de todo o aplicativo. Isto é leve em comparação com o processo

O Ciclo de Vida de um Tópico

Cada Thread tem um Ciclo de Vida. O Ciclo de Vida do thread é definido na classe System.Threading.Thread. A seguir estão os estágios do Ciclo de Vida de qualquer segmento.

  • Não iniciado
  • Executável (pronto para executar)
  • Corrida
  • Não executável
  • Morto

A classe Thread fornece as seguintes propriedades e métodos da seguinte maneira.

Propriedades da linha

plano de monitoramento e controle do projeto
Propriedade Descrição
CurrentThread retorna a instância do encadeamento atualmente em execução.
Está vivo verifica se o segmento atual está ativo ou não.
IsBackground Para obter / definir o valor do segmento atual está em segundo plano ou não.
ManagedThreadId é usado para obter o id único para o encadeamento atualmente gerenciado.
Nome é usado para obter ou definir o nome do segmento atual.
Prioridade é usado para obter ou definir a prioridade do segmento atual.
ThreadState é usado para retornar um valor que representa o estado do thread.

Métodos de linha

Método Descrição
Aborto() é usado para encerrar o thread. Ele gera ThreadAbortException.
Interromper() é usado para interromper um thread que está no estado WaitSleepJoin.
Junte-se() é usado para bloquear todos os threads de chamada até que este thread termine.
ResetAbort () é usado para cancelar a solicitação Abort para o segmento atual.
Currículo() é usado para retomar o encadeamento suspenso. Está obsoleto.
Sono (Int32) é usado para suspender o segmento atual pelos milissegundos especificados.
Começar() altera o estado atual do encadeamento para Executável.
Suspender() suspende o encadeamento atual se não estiver suspenso. Está obsoleto.
Produção() é usado para ceder a execução da thread atual a outra thread.

Exemplo de thread principal

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

//Resultado:

MainThread

Manipulação de exceção

o exceção é um erro lançado pelo programa em seu tempo de execução. Executamos o Tratamento de Exceções para tornar nosso programa livre de exceções.

Exceção Descrição
System.DivideByZeroException Erro gerado ao dividir um número por zero.
System.NullReferenceException lida com o erro gerado referenciando o objeto nulo.
System.InvalidCastException lida com o erro gerado por typecasting inválido.
System.IO.IOException lida com os erros de entrada / saída.
System.FieldAccessException Erro gerado por acesso privado / protegido inválido.

Em C #, usamos 4 palavras-chave para realizar manipulação de exceção:

  • tentar
  • pegar
  • finalmente, e
  • lançar
Exemplo:
usando System public class EdurekExample {public static void Main (string [] args) {try {int a = 10 int b = 0 int x = a / b} catch (Exceção e) {Console.WriteLine (e)} Console.WriteLine ('Esta mensagem é do bloco catch')}}

//Resultado:

System.DivideByZeroException: tentativa de divisão por zero.
em ExExaEdurekample.Main (String [] args) em F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: linha 10
Esta mensagem é do bloco catch

Exemplo de exceção personalizada

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

//Resultado:

InvalidAgeException: Desculpe, espera-se que a idade seja maior que 18
em Customized.validate (Int32 age) em F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: linha 18
em Customized.Main (String [] args) em F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: linha 23
O bloco catch está sendo executado agora.

Finalmente exemplo de bloco

usando a classe pública FinalExecption {public static void Main (string [] args) {try {int a = 10 int b = 0 int x = a / b} catch (Exception e) {Console.WriteLine (e)} finally {Console .WriteLine ('Finalmente o bloco é executado')} Console.WriteLine ('Captura o bloco é executado')}}

//Resultado:

System.DivideByZeroException: tentativa de divisão por zero.
em FinalExecption.Main (String [] args) em F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: linha 10
Finalmente o bloco é executado
O bloco de captura é executado

Assinatura de exceção do sistema

[SerializableAttribute] [ComVisibleAttribute (true)] public class SystemException: Exception

Construtores de exceção do sistema

Construtor Descrição
SystemException () É usado para inicializar uma nova instância da classe SystemException.
SystemException

(SerializationInfo, StreamingContext)

É usado para inicializar uma nova instância da classe SystemException com dados serializados.
SystemException (String) Ele é usado para inicializar uma nova instância da classe SystemException com uma mensagem de erro especificada.
SystemException (String, Exception) Ele é usado para inicializar uma nova instância da classe SystemException com uma mensagem de erro especificada e uma referência à exceção interna que é a causa dessa exceção.

Propriedades de exceção do sistema

Propriedade Descrição
Dados É usado para obter uma coleção de pares de chave / valor que fornecem informações adicionais definidas pelo usuário sobre a exceção.
HelpLink É usado para obter ou definir um link para o arquivo de ajuda associado a esta exceção.
HResult É usado para obter ou definir HRESULT, um valor numérico codificado que é atribuído a uma exceção específica.
InnerException É usado para obter a instância Exception que causou a exceção atual.
mensagem É usado para obter uma mensagem que descreve a exceção atual.
Fonte É usado para obter ou definir o nome do aplicativo que causa o erro.
StackTrace É usado para obter uma representação de string dos quadros imediatos na pilha de chamadas.
TargetSite É usado para obter o método que lança a exceção atual.

Métodos de exceção do sistema

Métodos Descrição
Igual a (objeto) É usado para verificar se o objeto especificado é igual ou não ao objeto atual.
Finalizar() É usado para liberar recursos e realizar operações de limpeza.
GetBaseException () É usado para obter a exceção de root.
GetHashCode () Ele é usado para obter o código hash.
GetObjectData

(SerializationInfo, StreamingContext)

É usado para obter dados do objeto.
GetType () É usado para obter o tipo de tempo de execução da instância atual.
MemberwiseClone () É usado para criar uma cópia superficial do Objeto atual.
Para sequenciar() É usado para criar e retornar uma representação de string da exceção atual.

Exemplo de exceção do sistema

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

//Resultado:

System.IndexOutOfRangeException: o índice estava fora dos limites da matriz.
em CSharpProgram.SystemExceptionExample.Main (String [] args) em F: C # TutorialC # ProgramsConsoleApp1ConsoleApp1Program.cs: linha 11

Sincronização

A sincronização pode ser uma técnica que permite que apenas 1 thread acesse o recurso por um tempo específico. Nenhum encadeamento alternativo será interrompido até que o encadeamento indicado termine sua tarefa.

No programa multithreading, threads são permitidospara acessar qualquer recurso para oexecução especificadaTempo. Threads compartilham recursos e são executados de forma assíncrona. Acessando recursos compartilhados (dados)pode ser uma tarefa importanteisso geralmentepoderia pararo sistema.temos a tendência de influenciá-locriando threads de maneira síncrona.

Exemplo sem sincronização

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

//Resultado:

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

Exemplo com sincronização

usando 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() } } 

//Resultado:

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

Novas características

A Microsoft adicionou muitos recursos mais recentes à linguagem C #, alguns deles são mencionados abaixo.

C # 6.0

  • Usando diretiva estática
  • Filtros de exceção
  • Aguarde nos blocos catch / finally
  • Inicializadores de propriedade automática
  • Valores padrão para propriedades somente getter
  • Membros com corpo de expressão
  • Propagador nulo
  • Interpolação de string
  • Nome do operador
  • Inicializador de dicionário
  • Compilador como serviço (Roslyn)

C # 7.0

  • Correspondência de padrões
  • Tuplas
  • Desconstrução
  • Funções locais
  • Separador de dígitos
  • Literais binários
  • Devoluções de referência e locais
  • Construtores e finalizadores com corpo de expressão
  • Getters e setters com corpo de expressão
  • Variáveis ​​externas
  • Tipos de retorno assíncronos generalizados

C # 7.1

  • Assíncrono principal
  • Expressões padrão

Perguntas da entrevista baseadas em C #

As perguntas importantes da entrevista com base na linguagem de programação C # podem ser encontradas neste .

Com isso, chegamos ao fim deste artigo “Tutorial C #”. Espero que você tenha entendido a importância das estruturas de dados, sintaxe, funcionalidade e operações realizadas com eles. Agora que você entendeu os fundamentos da programação em C # por meio desteTutorial C #, Confira o treinamento fornecido por Edureka em muitas tecnologias como Java, Primavera e muitosmais, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo obteve um pergunta para nós? Mencione-o na seção de comentários deste blog “Tutorial C #” e entraremos em contato com você o mais breve possível.