C# COM VISUAL STUDIO – NÍVEL AVANÇADO I

julho 18, 2024 0 Por Prof. Ursulino Martins

Tópicos Abordados

  1. LINQ (Language Integrated Query)
  2. Async e Await
  3. Manipulação de Arquivos
  4. Expressões Lambda
  5. Eventos e Delegates
  6. Reflexão
  7. Programação Assíncrona
  8. Interfaces Funcionais
  9. Tratamento de Exceções Avançado
  10. 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?