Compartilhar via


Quando usar delega em vez de Interfaces (guia de programação C#)

Tanto os delegates como as interfaces permitem ao desenvolvedor de classes separar declarações de tipos da sua implementação. Um dado interface podem ser herdadas e implementada por qualquer classe ou struct. A delegar podem ser criados para um método em qualquer classe, desde que o método se adapta a assinatura do método para o delegado. Uma referência de interface ou um representante pode ser usado por um objeto que não tem conhecimento da classe que implementa o método de interface nem delegate. Dadas essas semelhanças, quando um designer de classe deve usar um delegado e quando ele usa uma interface?

Use um delegado nas seguintes circunstâncias:

  • Um padrão de design eventing é usado.

  • É desejável para encapsular um método estático.

  • O chamador não precisa acessar outras propriedades, métodos ou interfaces no objeto que está implementando o método.

  • Composição fácil é desejada.

  • A classe pode precisar de mais de uma implementação para o método.

Use uma interface nas seguintes circunstâncias:

  • Existe um grupo de métodos relacionados que podem ser chamados.

  • A classe só precisa uma implementação do método.

  • A classe usando a interface desejará converter essa interface para outros tipos de interface ou classe.

  • O método que está sendo implementado está vinculado ao tipo ou a identidade da classe: Por exemplo, métodos de comparação.

Um bom exemplo do uso de uma único método interface em vez de um delegado é IComparable ou a versão genérica, IComparable<T>. IComparabledeclara o CompareTo método, que retorna um número inteiro que especifica um menor que igual ou maior que o relacionamento entre dois objetos do mesmo tipo. IComparablepode ser usado como base para um algoritmo de classificação. Embora usando um método de comparação do delegado, como a base de um algoritmo de classificação seria válida, não é ideal. Como a capacidade de comparar pertence à classe e o algoritmo de comparação não é alterado em tempo de execução, uma único método interface é ideal.

Consulte também

Referência

Events (C# Programming Guide)

Methods (C# Programming Guide)

Interfaces (C# Programming Guide)

Conceitos

C# Programming Guide