Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 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:

  1. 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)

  1. Salve o arquivo como: Atividade_12_1_SeuNome
  2. 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:

  1. Declarar interface IProdutor<out T> permitindo atribuição polimórfica IProdutor<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)

  1. Salve o arquivo como: Atividade_12_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_12_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_12_4_SeuNome
  2. 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