Implementar explicitamente membros de interface
Uma interface é um contrato de suporte a algumas funcionalidades. Classes que implementam uma interface devem fornecer os detalhes de implementação para os membros especificados na interface. Por exemplo, a IEnumerator interface define sistema autônomo assinaturas de membro um deve implementar para oferecer suporte a enumeração de um conjunto de objetos, sistema autônomo uma coleção. Para implementar IEnumerator, uma classe deve implementar o Current, MoveNext, e Reset membros.
Quando um membro da interface é implementado explicitamente por uma classe, o membro pode ser acessado somente usando uma referência à interface. Isso tem o efeito de ocultar o membro de interface. Uma razão comum para implementar explicitamente um membro da interface não é apenas cumprir com o contrato da interface, mas também para melhorá-lo de alguma maneira (por exemplo, para fornecer métodos com fortemente tipado que devem ser usados no lugar do método weakly tipados da interface). Outra razão comum para a implementação de um membro da interface explicitamente é quando o membro de interface explícita não deve ser chamado por desenvolvedores. Por exemplo, a GetObjectData com mais freqüência explicitamente é implementar o membro porque ele é chamado pela infra-estrutura de serialização e não se destina a ser chamado no código.
As seguintes diretrizes de design ajudam a garantir que seu projeto de biblioteca usa a implementação explícita da interface quando apropriado.
Evite implementar explicitamente membros de interface sem a necessidade de um forte motivo para isso.
Noções básicas sobre a implementação explícita requer um nível avançado de conhecimentos. Por exemplo, muitos desenvolvedores não sabem que um membro implementado explicitamente é publicamente acessível apesar de sua assinatura é particular. Assim, implementados explicitamente os membros não aparecem na lista de membros publicamente visíveis. Implementar explicitamente um membro também pode causar conversão boxing desnecessário dos tipos de valor.
Considere implementar explicitamente membros de interface se os membros devem ser chamado somente por meio da interface.
Isso inclui principalmente sistema autônomo membros que oferecem suporte a infra-estrutura do .NET Framework, sistema autônomo vinculação de dados ou de serialização. Por exemplo, oIsReadOnly propriedade tem o objetivo de ser acessado apenas por infra-estrutura de ligação de dados usando uma referência para o ICollection<T> interface. The List<T> classe implementa explicitamente a propriedade porque ele atende a essa diretriz.
Considere a implementação de membros de interface explicitamente para simular a variação (isto é, alterar parâmetros ou tipo de retorno no membros substituídos).
Geralmente isso é concluído para oferecer versões com fortemente tipado dos membros da interface.
Considere a implementação de membros de interface explicitamente para ocultar um membro e adicionar um membro com um nome melhor equivalente.
Isso efetivamente renomeia um membro. Por exemplo, Stream implementa Dispose explicitamente e fornece o Close método em seu lugar.
Não use membros explícitos sistema autônomo um limite de segurança.
Implementar explicitamente um membro não fornece nenhuma segurança. Esses membros são publicamente acessível usando uma referência à interface.
Fornecem um membro virtual protegido que oferece a mesma funcionalidade sistema autônomo o membro implementado explicitamente se a funcionalidade é destinada a ser especializado por derivado clsistema autônomoses.
Implementada explicitamente os membros não podem ser substituídos. Se eles são redefinidos em uma classe derivada, é impossível para a classe derivada chamar a implementação da classe base. O nome do membro protegido usando o mesmo nome do membro de interface explícita ou fixar Core nome de membro interface.
Partes direitos autorais 2005 Microsoft Corporation. Todos os direitos reservados.
Partes direitos autorais Addison-Wesley Corporation. Todos os direitos reservados.
Para obter mais informações sobre diretrizes de design, consulte a "diretrizes de design do estrutura: Catálogo de convenções, idiomas e padrões para bibliotecas do .NET reutilizável"Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.
Consulte também
Conceitos
Outros recursos
Diretrizes de design de membro
Diretrizes de Design para desenvolvimento bibliotecas de classe