0Pricing
C# Academy · Aula

Métodos/tipos genéricos e restrições

Escreva métodos e tipos genéricos; adicione restrições com where T : … (class, struct, new(), interface/base).

Métodos/tipos genéricos e restrições é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.

Visão geral dos genéricos

Objetivo: Reutilize código com segurança usando genéricos.

  • Métodos e tipos genéricos
  • Restrições: class, struct, new(), interface/base
  • Mantenha os exemplos pequenos e claros

Método genérico

Um método genérico tem uma lista de parâmetros de tipo, por exemplo, Identity<T>, e funciona com muitos tipos.

using System;

// Generic method works for any T
public class Program
{
  static T Identity<T>(T value)
  {
    // just returns what it got
    return value;
  }

  public static void Main(string[] args)
  {
    int a = Identity<int>(5);
    string b = Identity<string>("hi");
    Console.WriteLine(a + " & " + b);
  }
}

Tipo genérico

Um tipo genérico (como Box<T>) é compilado uma vez e usado com muitos tipos concretos.

using System;

// Simple generic type to hold a value
public sealed class Box<T>
{
  private T _value;
  public Box(T value) { _value = value; }
  public T Get() { return _value; }
  public void Set(T value) { _value = value; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Box<int> bi = new Box<int>(10);
    Box<string> bs = new Box<string>("ok");
    Console.WriteLine(bi.Get() + " | " + bs.Get());
  }
}

Restrição new()

Add where T : new() se você precisar chamar new T() dentro de código genérico.

using System;

// Factory that can create T with a parameterless ctor
public static class Factory
{
  public static T Create<T>() where T : new()
  {
    return new T(); // allowed thanks to new() constraint
  }
}

public sealed class Person
{
  public string Name;
  public Person() { Name = "Anon"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Person p = Factory.Create<Person>();
    Console.WriteLine(p.Name);
  }
}

Restrição de interface

Restrinja T a uma interface ou classe base para poder chamar seus membros (por exemplo, IComparable<T>).

using System;

// Min for two values that can be compared
public static class Utils
{
  public static T Min<T>(T a, T b) where T : IComparable<T>
  {
    return a.CompareTo(b) <= 0 ? a : b;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Utils.Min(5, 3));          // 3
    Console.WriteLine(Utils.Min("b", "a"));      // a
  }
}

Restrições de classe/estrutura e dicas

Outras restrições:

  • where T : class → somente tipos de referência
  • where T : struct → tipos de valor que não aceitam nulo
  • Combine restrições: where T : class, IDisposable, new()
  • Mantenha as APIs mínimas; prefira restrições de interface para obter flexibilidade.

Significado da restrição new()

Verificação rápida: qual restrição permite criar um new T() dentro de código genérico?

Recapitulação

Recapitulação: Crie métodos/tipos genéricos e adicione restrições para usar os membros necessários: interface/base para comportamento, class/struct para o tipo e new() para chamar um construtor sem parâmetros.

Perguntas Frequentes

A aula “Métodos/tipos genéricos e restrições” é grátis?

Sim — o texto completo de “Métodos/tipos genéricos e restrições” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.

O que vou aprender em “Métodos/tipos genéricos e restrições”?

Escreva métodos e tipos genéricos; adicione restrições com where T : … (class, struct, new(), interface/base). Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 3.

Quanto tempo leva a aula “Métodos/tipos genéricos e restrições”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Métodos/tipos genéricos e restrições
  2. Variância (in/out) com interfaces e delegados
  3. Tipos de referência anuláveis (conscientização) e anotações (padrões do C# 6)
← Voltar para C# Academy