IRONSOFTWAREHOME
ATUALIZAÇÕES DO DESENVOLVEDOR

Genéricos em C# (Como funciona para desenvolvedores)

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

Os genéricos em C# introduzem uma maneira de projetar classes, métodos, interfaces e delegados onde o tipo de dados que eles gerenciam pode ser especificado como um parâmetro. Esse conceito, conhecido como parâmetro de tipo genérico, permite a criação de componentes de código flexíveis e reutilizáveis. Ao usar genéricos , você pode maximizar a reutilização de código, a segurança de tipos e o desempenho. Por exemplo, uma classe genérica pode ser definida uma única vez, mas instanciada com vários tipos de dados, oferecendo versatilidade e integridade de tipos. Neste artigo, aprenderemos sobre os conceitos básicos de genéricos em C# e os recursos da biblioteca IronPDF para manipulação de PDFs .

Noções básicas de classes genéricas

Uma classe genérica em C# é um modelo para criar uma classe com um espaço reservado para o tipo que ela contém ou sobre o qual opera. Este marcador, geralmente denotado por T , representa um parâmetro de tipo que é especificado quando a classe é instanciada. Podemos criar classes genéricas com parâmetro de tipo T para lidar com diversos tipos de dados. Classes genéricas são particularmente úteis para classes de coleção, como listas, filas e tabelas hash, pois podem armazenar qualquer tipo de dado, garantindo a segurança de tipos e reduzindo a necessidade de conversão de tipos.

Exemplo simples de uma classe genérica

Considere uma classe genérica chamada Box , projetada para armazenar um valor de qualquer tipo:

public class Box<t>
{
    private T data;

    public Box(T data)
    {
        this.data = data;
    }

    public T Data
    {
        get { return data; }
    }
}

Para usar essa classe, você cria uma instância especificando o tipo real para T:

Box<int> integerBox = new Box<int>(123);
Box<string> stringBox = new Box<string>("Hello");

Este código ilustra como uma única classe (Box) pode se adaptar para armazenar diferentes tipos de dados (int, string), demonstrando o poder dos genéricos para reutilização de código e segurança de tipos.

Implementando métodos genéricos

Os métodos genéricos são semelhantes às classes genéricas, mas são definidos com parâmetros de tipo no nível do método. Isso permite a criação de métodos que podem operar em diferentes tipos, mesmo estando definidos em uma classe não genérica ou em uma genérica.

Exemplo de um método genérico

Aqui está um método que troca dois elementos em uma matriz de qualquer tipo:

public class Utility
{
    // Swaps two elements by reference using generics
    public static void Swap<t>(ref T lhs, ref T rhs)
    {
        T temp = lhs; // Store lhs in a temporary variable
        lhs = rhs;    // Assign rhs to lhs
        rhs = temp;   // Assign temp (original lhs) to rhs
    }
}

A utilização do método acima pode ser feita da seguinte forma:

int a = 1, b = 2;
Utility.Swap<int>(ref a, ref b);

string first = "world", second = "hello";
Utility.Swap(ref first, ref second);

Explorando interfaces genéricas e delegados

Interfaces genéricas e delegados permitem definir contratos e métodos de retorno de chamada que podem operar com qualquer tipo. Implementar uma interface genérica ou usar um delegado genérico em sua classe ou método aumenta a flexibilidade e a reutilização de código.

Exemplo de interface genérica

Uma interface genérica de repositório para operações de acesso a dados poderia ser semelhante a esta:

public interface IRepository<t>
{
    void Add(T item);
    T GetById(int id);
    IEnumerable<t> GetAll();
}

Essa interface pode ser implementada por qualquer classe para lidar com tipos de dados específicos, permitindo padrões de acesso a dados consistentes em diferentes tipos.

Exemplo genérico de delegado

Um delegado genérico pode ser usado para definir um retorno de chamada com segurança de tipo:

public delegate void Action<t>(T item);

Utilizando Coleções Genéricas

Classes de coleções genéricas, como List, Dictionary<TKey, TValue>, e outras no namespace System.Collections.Generic, oferecem coleções eficientes e seguras para armazenar e manipular dados de qualquer tipo específico. Essas coleções são superiores às suas contrapartes não genéricas porque eliminam a necessidade de conversão de tipos e reduzem os erros de tempo de execução.

List<string> names = new List<string>();
names.Add("Alice");
names.Add("Bob");

Dictionary<int, string> keyValuePairs = new Dictionary<int, string>();
keyValuePairs.Add(1, "One");
keyValuePairs.Add(2, "Two");

Criando tipos genéricos personalizados

Além de usar tipos genéricos predefinidos, você pode criar os seus próprios para encapsular operações que são comuns a diferentes tipos de dados, mas que precisam ser tratadas de maneira específica para cada tipo. Essa abordagem é particularmente útil para a construção de bibliotecas, estruturas ou utilitários que serão usados ​​com diversos tipos de dados.

Exemplo de tipo genérico personalizado

Considere uma classe Result genérica que encapsula os resultados da operação juntamente com um indicador de sucesso e uma mensagem opcional:

public class Result<t>
{
    public bool Success { get; private set; }
    public T Data { get; private set; }
    public string Message { get; private set; }

    public Result(bool success, T data, string message = "")
    {
        Success = success;
        Data = data;
        Message = message;
    }
}

IronPDF: Biblioteca PDF em C#

IronPDF é uma biblioteca abrangente projetada para desenvolvedores .NET criarem, editarem e extrairem documentos PDF em seus aplicativos. O IronPDF ajuda a gerar PDFs a partir de HTML , editar PDFs existentes, converter PDFs em imagens e muito mais. Embora o IronPDF em si não seja baseado em genéricos, entender como interagir com essa biblioteca em um ambiente C# pode aprimorar significativamente os recursos de gerenciamento de documentos do seu aplicativo.

Exemplo de código: Usando palavra-chave virtual com IronPDF

A ideia por trás do uso de genéricos aqui é criar um método reutilizável que possa gerar um PDF a partir de qualquer string HTML fornecida. Este método será genérico, permitindo-nos especificar diferentes tipos de metadados ou configurações conforme necessário.

Primeiro, vamos definir uma classe genérica simples que irá armazenar nossas opções de geração de PDF. Para fins de demonstração, esta classe será básica, mas você pode expandi-la com mais propriedades para atender às suas necessidades.

public class PdfOptions<t>
{
    public T Metadata { get; set; }
    public string HtmlContent { get; set; }
}

Agora, vamos criar um método estático que gera um PDF usando IronPDF, aproveitando nossa classe PdfOptions. Este método aceitará uma instância de PdfOptions como seu parâmetro, demonstrando o uso de genéricos em ação.

using IronPdf; // Make sure to include the necessary namespace for IronPDF

public static class PdfGenerator
{
    // Generates a PDF from provided HTML content and options
    public static void GeneratePdf<t>(PdfOptions<t> options)
    {
        // Initialize the IronPDF HtmlToPdf renderer
        var renderer = new ChromePdfRenderer();

        // Optional: Apply any renderer options here, for example, setting the paper size
        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;

        // Generate the PDF from HTML content
        var pdfDocument = renderer.RenderHtmlAsPdf(options.HtmlContent);

        // Optional: Here, you can use options.Metadata in some way, depending on your generic type T
        // For simplicity, we're just printing the metadata to console if it's of type string
        if (options.Metadata is string metadataString)
        {
            Console.WriteLine($"Metadata: {metadataString}");
        }

        // Save the PDF to a file
        var fileName = $"GeneratedPdf_{DateTime.Now.Ticks}.pdf";
        pdfDocument.SaveAs(fileName);
        Console.WriteLine($"PDF generated and saved as {fileName}");
    }
}

Finalmente, vamos usar nossa classe PdfGenerator para gerar um documento PDF. Neste exemplo, a propriedade Metadata poderia ser uma string contendo um título ou qualquer outra informação que você considere relevante.

class Program
{
    static void Main(string[] args)
    {
        // Set the license key for IronPDF if needed
        License.LicenseKey = "Your-License-Key-Here";

        // Create PDF options with HTML content and metadata
        var options = new PdfOptions<string>
        {
            HtmlContent = "<h1>Hello, World!</h1><p>This is a test PDF document generated from HTML.</p>",
            Metadata = "Test PDF Title"
        };

        // Generate the PDF using the specified options
        PdfGenerator.GeneratePdf(options);
    }
}

Este exemplo ilustra o básico de integrar o IronPDF com C# Generics, proporcionando uma maneira flexível de gerar PDFs a partir de conteúdo HTML, permitindo ao mesmo tempo a personalização de metadados ou configurações através da classe genérica PdfOptions. Você pode expandir isso adicionando opções mais sofisticadas e configurações de renderização conforme necessário para sua aplicação.

C# Genéricos (Como Funciona para Desenvolvedores): Figura 1 - Saída de código exemplo utilizando genéricos para criar um documento PDF a partir de uma string HTML usando IronPDF

Conclusão

Os genéricos em C# são uma ferramenta poderosa para desenvolver código de alta qualidade, reutilizável e com segurança de tipos. Ao compreender e aplicar classes, métodos, interfaces e delegates genéricos, você pode escrever um código mais adaptável e fácil de manter. Os genéricos não apenas permitem a reutilização de código em diferentes tipos de dados, mas também garantem a verificação de tipos em tempo de compilação, o que reduz erros em tempo de execução e melhora a qualidade geral do código. IronPDF oferece uma avaliação gratuita de suas ferramentas de biblioteca PDF, com custos a partir de $999 em diante.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.