Você pode receber um erro do compilador CS0117 ao implementar explicitamente um evento de interface

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 821175
Sintomas
Você pode implementar interface eventos em uma classe explicitamente. No entanto, quando você implementar interface eventos explicitamente e instanciar a instância da classe, você receberá a seguinte mensagem de erro compilador:
Erro CS0117: ' namespace. class name 'não contém uma definição para o Interface name
Causa
Quando uma classe explicitamente implementa os eventos de uma interface, implementados explicitamente eventos não são acessíveis de instâncias de classe.
Como Contornar
Para contornar esse problema, crie uma instância da interface e, em seguida, acessar os eventos.

Use o seguinte código para criar uma instância da interface para eventos de acesso:
IMyInterface eventSample = new ExplicitEventSample();eventSample.MyEvent += new MyDelegate(FindLength);
Situação
Esse comportamento é por design.
Mais Informações

Passos para reproduzir o problema

  1. Cole o seguinte código no bloco de notas:
    using System;namespace EventTest{    public delegate int MyDelegate(string s);    public interface IMyInterface    {        event MyDelegate MyEvent;    }    public class ExplicitEventSample: IMyInterface    {        event MyDelegate IMyInterface.MyEvent //Explicit implementation of IMyInterface.MyEvent        {            add            {                MyEvent2Storage += value;            }            remove            {                MyEvent2Storage -= value;            }        }        public MyDelegate MyEvent2Storage; // underlying storage for IMyInterface.MyEvent.    }    class Class1    {        [STAThread]        static int FindLength(string strArg)        {            return strArg.Length;        }                static void Main(string[] args)        {           ExplicitEventSample eventSample = new ExplicitEventSample();           eventSample.MyEvent += new MyDelegate(FindLength);                  }    }}
  2. Salve o arquivo como c:\Sample.cs .
  3. No prompt de comando Visual Studio. NET, execute o seguinte comando para compilar o código:
    csc 	c:\Sample.cs
Você pode receber o erro de compilação que é mencionado na seção "Sintomas" deste artigo.
Referências
Para obter mais informações sobre a implementação de interface explícita, consulte a seguinte site da Microsoft Developer Network (MSDN):
Tutorial de implementação de interface explícita
http://msdn2.microsoft.com/en-us/library/Aa288461(VS.71).aspx

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 821175 - Última Revisão: 11/26/2007 07:02:04 - Revisão: 1.6

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# 2005 Express Edition

  • kbmt kbprogramming kbcompiler kbprb KB821175 KbMtpt
Comentários