Fórum C# - interfaces - objeto instanciado #408923
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
Curtir tópico
+ 0Posts
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!
Gostei + 0
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.
Gostei + 0
01/11/2011
Joel Rodrigues
joelrlneto@gmail.com
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)