C# - interfaces - objeto instanciado

28/10/2011

0

Ficarei muito grato se alguém puder eliminar a minha dúvida. De acordo com o código mais abaixo (http://msdn.microsoft.com/pt-br/library/87d83y5b.aspx), eu posso utilizar a seguinte instrução?

ImplementationClass obj = new ImplementationClass();

Por que declarar a variável “obj” da classe ISampleInterface, sendo que eu implemento o método na classe ImplementationClass? E mais, como a variável “obj” do tipo ISampleInterface comporta/aceita um método da classe ImplementationClass, sem relação com a interface ISampleInterface?

interface ISampleInterface
{
    void SampleMethod();
}

class ImplementationClass : ISampleInterface
{
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.
    }

    static void Main()
    {
        ISampleInterface obj = new ImplementationClass();
        obj.SampleMethod();
    }
}
Fábio Kretzschmar

Fábio Kretzschmar

Responder

Posts

28/10/2011

Fábio Kretzschmar

Pessoal, no VS 2010 eu não consigo utilizar a instrução abaixo (de acordo com o código completo). Por que? Encontrei na web explicações que afirmam que é possível. Realmente não entendo o que é correto.

ImplementationClass obj = new ImplementationClass();


Ao compilar, a seguinte mensagem aparece:

WindowsFormsApplication1.ImplementationClass does not contain a definition for SampleMethod and no extension method SampleMethod accepting a first argument of type WindowsFormsApplication1.ImplementationClass could be found (are you missing a using directive or an assembly reference?)

Obrigado!
Responder

01/11/2011

Joel Rodrigues

Questão: eu posso utilizar a seguinte instrução: ImplementationClass obj = new ImplementationClass(); ?
Resposta: Sim, essa instrução apenas instancia um objeto da classe ImplementationClass
=========================================================================================================
Questão: Por que declarar a variável “obj” da classe ISampleInterface, sendo que eu implemento o método na classe ImplementationClass?
Resposta: Bem, ISampleInterface não é uma classe e sim uma interface. Declarando dessa forma, o objeto obj pode ser não só do tipo ImplementationClass mas de qualquer classe que implemente a interface ISampleInterface.
Exemplo: Imagine a interface IAnimal. Várias classes como Cachorro, Bode e Marreco implementam essa interface. Se eu declarar meu objeto como IAnimal, ele pode ser de qualquer um desses tipos citados. Lembrando que você não pode instanciar uma interface, ela é apenas um mdoelo.
=========================================================================================================
Questão:como a variável obj do tipo ISampleInterface comporta/aceita um método da classe ImplementationClass, sem relação com a interface ISampleInterface?
Resposta: Como assim sem relação? A classe ImplementationClass implementa a interface ISampleInterface ou seja, ela dá funcionalidade, na prática, aos métodos dessa interface. Nesse caso, o método SampleMethod não é diretamente da classe e sim da interface, a classe apenas o implementa.
=========================================================================================================

A estrutura/sintaxe desse código está correta. Eu sugiro que faça o seguinte: escreva a interface e a classe em arquivos separados e instancie o objeto em outro local. Essa estrutura que você está utilizando as vezes confunde, principalmente para quem está iniciando.

Qualquer dúvida, posta aí.
Abraço.
Responder

01/11/2011

Joel Rodrigues

Na dúvida, me manda um email que eu te passo uns exemplos e te explico melhor.
joelrlneto@gmail.com
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar