C# COM VISUAL STUDIO – NÍVEL INTERMEDIÁRIO
Primeiro programa no padrão c# .net
Variáveis
Escopo de variáveis
- Delegates e Eventos:
Em C#, delegates são tipos seguros que representam referências a métodos com uma assinatura específica. Eles são usados principalmente para implementar eventos e callbacks.
Exemplo de delegate:
csharpCopiar código// Definição de delegate
public delegate void MeuDelegate(string mensagem);
// Uso do delegate em um método
public class MinhaClasse
{
public void ExibirMensagem(string mensagem)
{
Console.WriteLine(mensagem);
}
}
// Exemplo de utilização do delegate
class Program
{
static void Main(string[] args)
{
MinhaClasse obj = new MinhaClasse();
MeuDelegate delegate1 = new MeuDelegate(obj.ExibirMensagem);
delegate1("Olá, mundo!");
}
}
Eventos são mecanismos baseados em delegates que permitem que uma classe notifique outras partes do código quando algo interessante acontece.
Exemplo de evento:
csharpCopiar código// Definição da classe que contém o evento
public class Publicador
{
public event MeuDelegate MeuEvento;
public void DispararEvento(string mensagem)
{
if (MeuEvento != null)
MeuEvento(mensagem);
}
}
// Uso do evento
class Program
{
static void Main(string[] args)
{
Publicador publicador = new Publicador();
MinhaClasse obj = new MinhaClasse();
// Inscrição no evento
publicador.MeuEvento += obj.ExibirMensagem;
// Disparo do evento
publicador.DispararEvento("Evento disparado!");
}
}
- Reflection:
Reflection permite examinar e manipular metadados de tipos em tempo de execução. É útil para tarefas como descobrir informações sobre classes, interfaces, métodos, propriedades, etc.
Exemplo de uso básico de reflection:
csharpCopiar códigousing System;
using System.Reflection;
public class MinhaClasse
{
public void MeuMetodo()
{
Console.WriteLine("Método executado!");
}
}
class Program
{
static void Main(string[] args)
{
Type tipo = typeof(MinhaClasse);
MethodInfo metodo = tipo.GetMethod("MeuMetodo");
if (metodo != null)
{
object instancia = Activator.CreateInstance(tipo);
metodo.Invoke(instancia, null);
}
}
}
Neste exemplo, typeof(MinhaClasse)
obtém o tipo da classe MinhaClasse
, e tipo.GetMethod("MeuMetodo")
retorna o método MeuMetodo
. metodo.Invoke(instancia, null)
invoca o método MeuMetodo
em uma instância criada dinamicamente de MinhaClasse
.
- Serialização de Dados:
A serialização é o processo de converter objetos ou estruturas de dados em um formato que pode ser armazenado ou transmitido e posteriormente reconstruído.
Exemplo de serialização em JSON:
csharpCopiar códigousing System;
using System.IO;
using System.Text.Json;
public class Pessoa
{
public string Nome { get; set; }
public int Idade { get; set; }
}
class Program
{
static void Main(string[] args)
{
Pessoa pessoa = new Pessoa { Nome = "João", Idade = 30 };
// Serialização para JSON
string jsonString = JsonSerializer.Serialize(pessoa);
Console.WriteLine(jsonString);
// Desserialização de JSON para objeto
Pessoa pessoaDesserializada = JsonSerializer.Deserialize<Pessoa>(jsonString);
Console.WriteLine($"Nome: {pessoaDesserializada.Nome}, Idade: {pessoaDesserializada.Idade}");
}
}
O exemplo acima usa o namespace System.Text.Json
para serializar uma instância da classe Pessoa
em JSON e depois desserializá-la de volta para um objeto Pessoa
.
- Desenvolvimento de Aplicações Multithreaded:
Multithreading é o uso de várias threads simultaneamente para melhorar a eficiência e a capacidade de resposta de aplicações.
Exemplo de uso de threads em C#:
csharpCopiar códigousing System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
// Exemplo de uso de threads
Thread thread1 = new Thread(new ThreadStart(Executar));
thread1.Start();
Thread thread2 = new Thread(new ParameterizedThreadStart(ExecutarComParametro));
thread2.Start("Thread 2");
// Aguardando as threads terminarem
thread1.Join();
thread2.Join();
Console.WriteLine("Todas as threads terminaram.");
}
static void Executar()
{
Console.WriteLine("Thread 1 executando.");
Thread.Sleep(2000); // Simula uma operação demorada
Console.WriteLine("Thread 1 terminou.");
}
static void ExecutarComParametro(object parametro)
{
string nome = (string)parametro;
Console.WriteLine($"{nome} executando.");
Thread.Sleep(3000); // Simula uma operação demorada
Console.WriteLine($"{nome} terminou.");
}
}
Neste exemplo, Thread
é usado para criar e iniciar threads. Thread.Sleep
é usado para simular operações demoradas. Join
é usado para esperar que as threads terminem antes de continuar.
- Padrões de Projeto (Design Patterns):
Padrões de projeto são soluções comprovadas para problemas recorrentes de design de software. Eles promovem a reutilização de código, a flexibilidade e a manutenibilidade.
Exemplo de padrão Singleton:
csharpCopiar códigopublic class Singleton
{
private static Singleton instancia;
private Singleton() { }
public static Singleton Instancia
{
get
{
if (instancia == null)
instancia = new Singleton();
return instancia;
}
}
public void ExibirMensagem()
{
Console.WriteLine("Método da instância Singleton.");
}
}
class Program
{
static void Main(string[] args)
{
Singleton s1 = Singleton.Instancia;
Singleton s2 = Singleton.Instancia;
s1.ExibirMensagem();
s2.ExibirMensagem();
Console.WriteLine(s1 == s2); // True, mesmo objeto
}
}
No exemplo acima, Singleton
garante que apenas uma instância da classe seja criada e fornece um ponto de acesso global para essa instância.
ATIVIDADE
Como se chama o mecanismo baseado em delegates que permite que uma classe notifique outras partes do código quando algo interessante acontece?
- a) Delegates
- b) Eventos
- c) Métodos
- d) Propriedades
Qual namespace é utilizado para realizar operações de serialização em JSON em C#?
- a) System.Xml.Serialization
- b) System.Runtime.Serialization
- c) System.Data.Serialization
- d) System.Text.Json
Para que serve o método Thread.Sleep
em C#?
- a) Para finalizar uma thread.
- b) Para iniciar uma nova thread.
- c) Para simular uma operação demorada.
- d) Para esperar por um evento.
Qual padrão de projeto garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global para essa instância?
- a) Factory
- b) Singleton
- c) Observer
- d) Prototype
O que o Reflection permite fazer em C#?
- a) Invocar métodos dinamicamente em tempo de execução.
- b) Gerar código automaticamente.
- c) Criar novos tipos de dados.
- d) Realizar cálculos matemáticos complexos.