Share 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 à identidade da classe ou tipo: 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 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 interface única-método é ideal.

Consulte também

Reference

Eventos (guia de programação do C#)

Métodos (guia de programação do C#)

Interfaces (guia de programação do C#)

Concepts

Guia de programação do C#