🧩 Exercícios: Generics, Constraints e Covariância/Contravariância
Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 12.1 — Classe Genérica com Restrição de Tipo (where T : class, new())
Contexto: Classe Genérica com Restrição de Tipo (where T : class, new()) no contexto de Generics, Constraints e Covariância/Contravariância.
Requisitos de Execução:
- Criar repositório genérico
Repositorio<T>com restrição exigindo construtor sem parâmetros.
Resultado Esperado
Instância de repositório genérico criada com segurança de tipos.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_1_SeuNome - Envie na tarefa:
Atividade Cap 12 - Generics, Constraints e Covariância/Contravariância
🔑 Gabarito de Código & Solução Comentada
// GenericsBasics.cs
public class Repositorio<T> where T : class, new() {
public T CriarNovo() => new T();
}
public class Cliente { public string Nome = "Padrao"; }
var repo = new Repositorio<Cliente>();
Cliente novo = repo.CriarNovo();
Console.WriteLine($"Cliente criado via Generics: {novo.Nome}");
🔍 Nível 2: Prática
Problema 12.2 — Covariância com a Palavra-chave out em Interfaces Genéricas
Contexto: Covariância com a Palavra-chave out em Interfaces Genéricas no contexto de Generics, Constraints e Covariância/Contravariância.
Requisitos de Execução:
- Declarar
interface IProdutor<out T>permitindo atribuição polimórficaIProdutor<Base> p = new Produtor<Derivada>().
Resultado Esperado
Covariância de tipos genéricos validada em tempo de compilação.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_2_SeuNome - Envie na tarefa:
Atividade Cap 12 - Generics, Constraints e Covariância/Contravariância
🔑 Gabarito de Código & Solução Comentada
// CovarianceDemo.cs
public interface IProdutor<out T> { T Obter(); }
public class ProdutorString : IProdutor<string> { public string Obter() => "Texto"; }
IProdutor<object> p = new ProdutorString(); // Valido graças ao out T
Console.WriteLine($"Objeto produzido: {p.Obter()}");
Console.WriteLine("Status de execucao: 200 OK");
Debug.Assert(true);
⚡ Nível 3: Integração
Problema 12.3 — Contravariância com a Palavra-chave in em Interfaces Consumidoras
Contexto: Contravariância com a Palavra-chave in em Interfaces Consumidoras no contexto de Generics, Constraints e Covariância/Contravariância.
Requisitos de Execução:
- Declarar
interface IConsumidor<in T>permitindo receber tipos mais genéricos.
Resultado Esperado
Contravariância de interfaces consumidoras homologada.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_3_SeuNome - Envie na tarefa:
Atividade Cap 12 - Generics, Constraints e Covariância/Contravariância
🔑 Gabarito de Código & Solução Comentada
// ContravarianceDemo.cs
public interface IConsumidor<in T> { void Consumir(T item); }
public class ConsumidorObjeto : IConsumidor<object> { public void Consumir(object item) => Console.WriteLine($"Consumido: {item}"); }
IConsumidor<string> c = new ConsumidorObjeto(); // Valido graças ao in T
c.Consumir("Dado Tipado");
Console.WriteLine("Status de execucao: 200 OK");
Debug.Assert(true);
🏆 Nível 4: Desafio Corporativo
Problema 12.4 — Membros Estáticos Abstratos em Interfaces (Static Abstract Interfaces do .NET 7/8)
Contexto: Membros Estáticos Abstratos em Interfaces (Static Abstract Interfaces do .NET 7/8) no contexto de Generics, Constraints e Covariância/Contravariância.
Requisitos de Execução:
- Declarar
static abstract T operator +(T a, T b)em interface permitindo algoritmos matemáticos genéricos.
Resultado Esperado
Matemática genérica via Static Abstract Members no C# 12.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_4_SeuNome - Envie na tarefa:
Atividade Cap 12 - Generics, Constraints e Covariância/Contravariância
🔑 Gabarito de Código & Solução Comentada
// StaticAbstract.cs
using System.Numerics;
T SomarValores<T>(T a, T b) where T : INumber<T> {
return a + b;
}
Console.WriteLine($"Soma generica int: {SomarValores(10, 20)}");
Console.WriteLine($"Soma generica double: {SomarValores(3.5, 2.5)}");
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |