Implementar membros de Interface explicitamente
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, o IEnumerator interface define as assinaturas de membro, um deve implementar para dar suporte a enumeração de um conjunto de objetos, como uma coleção. Para implementar IEnumerator, uma classe deve implementar a Current, MoveNext, e Reset membros.
Quando um membro da interface explicitamente é implementado por uma classe, o membro pode ser acessado usando somente uma referência à interface. Isso tem o efeito de ocultar o membro de interface. Uma razão comum para implementar explicitamente um membro de interface não é apenas cumprir o contrato da interface, mas também para melhorá-lo de alguma maneira (por exemplo, para fornecer métodos com rigidez de tipos que devem ser usados no lugar de métodos de rigidez digitado da interface). Outro motivo 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, o GetObjectData membro é implementado com mais freqüência explicitamente porque ele é chamado pela infra-estrutura de serialização e não se destina a ser chamado a partir do código.
As seguintes diretrizes de design ajudam a garantir que o seu projeto de biblioteca usa a implementação de interface explícita, quando apropriado.
Evite implementar membros de interface explicitamente sem ter 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 souber que um membro implementado explicitamente é acessível publicamente, mesmo que sua assinatura é particular. Dessa forma, implementados explicitamente membros não aparecem na lista de membros publicamente visíveis. Implementar explicitamente o membro também pode causar boxing desnecessário dos tipos de valor.
Considere a implementação de membros de interface explicitamente se os membros se destinam a ser chamado somente por meio da interface.
Principalmente, isso inclui membros que suportam o.Infraestrutura do NET Framework, como, por exemplo, vinculação de dados ou de serialização. Por exemplo,aIsReadOnly propriedade destina-se a ser acessado somente pela infra-estrutura de ligação de dados usando uma referência para o ICollection<T> interface. O List<T> classe implementa a propriedade explicitamente 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 em membros substituídos).
Isso é feito geralmente oferecem versões de rigidez de tipos de membros de interface.
Considere a implementação de membros de interface explicitamente para ocultar um membro e adicionar um membro equivalente com um nome melhor.
Isso efetivamente renomeia um membro. Por exemplo, Stream implementa Dispose explicitamente e fornece a Close método no lugar.
Não use membros explícitos como 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.
Fornece um membro virtual protegido que oferece a mesma funcionalidade que o membro implementada explicitamente se a funcionalidade é destinada a ser especializado classes derivadas.
Implementada explicitamente 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. Você deve nomear o membro protegido usando o mesmo nome como o membro de interface explícita ou garantirão Core para o nome de membro de interface.
Portions Copyright 2005 Microsoft Corporation. Todos os direitos reservados.
Portions Copyright Addison-Wesley Corporation. Todos os direitos reservados.
Para obter mais informações sobre as diretrizes de design, consulte a "diretrizes de Design do Framework: Convenções, idiomas e padrões de reutilizável.Bibliotecas de rede" catálogo por Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.
Consulte também
Conceitos
Outros recursos
Diretrizes de Design do membro
Diretrizes de Design para desenvolvimento bibliotecas de classe