C# COM VISUAL STUDIO – NÍVEL AVANÇADO I
Tópicos Abordados
- LINQ (Language Integrated Query)
- Async e Await
- Manipulação de Arquivos
- Expressões Lambda
- Eventos e Delegates
- Reflexão
- Programação Assíncrona
- Interfaces Funcionais
- Tratamento de Exceções Avançado
- Uso de Bibliotecas de Terceiros
Exemplo de Código 1: LINQ
LINQ (Language Integrated Query) permite escrever consultas diretamente na linguagem C#. É uma forma poderosa de trabalhar com coleções de dados.
csharpCopiar códigousing System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
Console.WriteLine("Números pares:");
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
Explicação: Este exemplo cria uma lista de números e usa LINQ para selecionar apenas os números pares. A expressão n => n % 2 == 0
é uma expressão lambda que define a condição para selecionar os números pares.
Exemplo de Código 2: Async e Await
Async e Await são usados para escrever código assíncrono, permitindo que o programa continue executando enquanto aguarda operações que podem levar tempo, como requisições web.
csharpCopiar códigousing System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
HttpClient client = new HttpClient();
string result = await client.GetStringAsync("https://api.github.com/");
Console.WriteLine(result);
}
}
Explicação: Este exemplo usa a classe HttpClient
para fazer uma requisição GET assíncrona para a API do GitHub. O uso de await
permite que o programa continue executando enquanto aguarda a resposta da requisição.
Exemplo de Código 3: Manipulação de Arquivos
Manipulação de arquivos envolve operações como leitura e escrita de dados em arquivos do sistema de arquivos.
csharpCopiar códigousing System;
using System.IO;
class Program
{
static void Main()
{
string path = "example.txt";
// Escrever no arquivo
File.WriteAllText(path, "Hello, World!");
// Ler do arquivo
string content = File.ReadAllText(path);
Console.WriteLine(content);
}
}
Explicação: Este exemplo escreve a string “Hello, World!” em um arquivo chamado example.txt
e, em seguida, lê o conteúdo do arquivo e o exibe no console.
Exemplo de Código 4: Expressões Lambda
Expressões lambda são funções anônimas que podem ser usadas para criar delegados ou expressões de árvore.
csharpCopiar códigousing System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var squaredNumbers = numbers.Select(n => n * n);
Console.WriteLine("Números ao quadrado:");
foreach (var num in squaredNumbers)
{
Console.WriteLine(num);
}
}
}
Explicação: Este exemplo usa a função Select
para aplicar a expressão lambda n => n * n
a cada número na lista, resultando em uma nova lista de números ao quadrado.
Exemplo de Código 5: Eventos e Delegates
Delegates são tipos que representam referências a métodos com uma assinatura específica. Eventos permitem que uma classe ou objeto notifique outros objetos quando algo interessante acontece.
csharpCopiar códigousing System;
class Program
{
public delegate void Notify();
public event Notify OnProcessCompleted;
static void Main()
{
Program program = new Program();
program.OnProcessCompleted += Program_OnProcessCompleted;
program.Process();
}
void Process()
{
// Processo simulado
Console.WriteLine("Processando...");
OnProcessCompleted?.Invoke();
}
private static void Program_OnProcessCompleted()
{
Console.WriteLine("Processo concluído!");
}
}
Explicação: Neste exemplo, a classe Program
define um delegate Notify
e um evento OnProcessCompleted
. Quando o método Process
é chamado, ele dispara o evento, que então chama o método Program_OnProcessCompleted
.
Exemplo de Código 6: Reflexão
Reflexão permite que o código inspecione os próprios metadados e trabalhe com tipos e membros em tempo de execução.
csharpCopiar códigousing System;
using System.Reflection;
class Program
{
static void Main()
{
Type type = typeof(DateTime);
Console.WriteLine("Métodos da classe DateTime:");
MethodInfo[] methods = type.GetMethods();
foreach (MethodInfo method in methods)
{
Console.WriteLine(method.Name);
}
}
}
Explicação: Este exemplo usa a classe Type
para obter informações sobre a classe DateTime
, incluindo todos os seus métodos públicos. Em seguida, ele imprime os nomes desses métodos no console.
Exemplo de Código 7: Programação Assíncrona
A programação assíncrona permite que operações de longa duração sejam executadas sem bloquear o thread principal, melhorando a responsividade do aplicativo.
csharpCopiar códigousing System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Console.WriteLine("Iniciando...");
await Task.Delay(2000);
Console.WriteLine("Tarefa assíncrona concluída após 2 segundos.");
}
}
Explicação: Este exemplo usa Task.Delay
para simular uma tarefa assíncrona que dura 2 segundos. O uso de await
permite que o programa continue executando enquanto espera que a tarefa seja concluída.
Exemplo de Código 8: Interfaces Funcionais
Interfaces funcionais são interfaces com um único método abstrato. Elas são frequentemente usadas com expressões lambda.
csharpCopiar códigousing System;
interface IFunctional
{
void Execute(string message);
}
class Program : IFunctional
{
static void Main()
{
Program program = new Program();
program.Execute("Hello from functional interface!");
}
public void Execute(string message)
{
Console.WriteLine(message);
}
}
Explicação: Este exemplo define uma interface IFunctional
com um método Execute
. A classe Program
implementa essa interface e fornece uma implementação para o método Execute
.
Exemplo de Código 9: Tratamento de Exceções Avançado
O tratamento de exceções permite que o programa lide com erros de forma controlada.
csharpCopiar códigousing System;
class Program
{
static void Main()
{
try
{
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers[5]);
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine($"Erro: {ex.Message}");
}
finally
{
Console.WriteLine("Bloco finally executado.");
}
}
}
Explicação: Este exemplo tenta acessar um índice fora dos limites do array, o que lança uma IndexOutOfRangeException
. A exceção é capturada e tratada no bloco catch
, e o bloco finally
é executado independentemente de uma exceção ter sido lançada ou não.
Exemplo de Código 10: Uso de Bibliotecas de Terceiros
C# permite a integração com bibliotecas de terceiros para adicionar funcionalidades extras ao aplicativo.
csharpCopiar códigousing System;
using Newtonsoft.Json;
class Program
{
static void Main()
{
var person = new { Name = "John", Age = 30 };
string json = JsonConvert.SerializeObject(person);
Console.WriteLine("JSON:");
Console.WriteLine(json);
}
}
Explicação: Este exemplo usa a biblioteca Newtonsoft.Json
para converter um objeto em uma string JSON. A biblioteca é uma das mais populares para manipulação de JSON em C#.
ATIVIDADES
- O que significa LINQ?
- Para que serve a palavra-chave
async
em C#? - Qual é a função do método
File.WriteAllText
? - O que é uma expressão lambda?
- Como você declara um delegate em C#?
- Qual namespace é necessário para usar a classe
HttpClient
? - O que é a reflexão em C#?
- Qual método é usado para fazer uma pausa de 2 segundos em um programa assíncrono?
- O que faz a interface
IFunctional
no exemplo dado?