C# - interfaces - objeto instanciado
28/10/2011
0
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
Posts
28/10/2011
Fábio Kretzschmar
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!
01/11/2011
Joel Rodrigues
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.
01/11/2011
Joel Rodrigues
joelrlneto@gmail.com
Clique aqui para fazer login e interagir na Comunidade :)