Public Interface


por Mauricio Junior em 1/1/2011 0

 

 

Livros publicados

 

         Olá pessoal, “utilizar public interface” nos projetos hoje em dia tem sido uma boa prática de programação aos desenvolvedores fascinados em orientação a objetos. Então o meu objetivo é mostrar como utilizar “interface” dentro do C#.NET com a IDE Visual Studio.NET 2005.

A interface serve apenas para gerenciar automaticamente qual a classe e método irá ser chamado.

 

Requisitos:

- Visual Studio.NET 2005

- Framework 2.0

- Linguagem C#.NET

- Aplicação do tipo WEB (ASP.NET).

 

Vamos para prática:

 

         O primeiro passo foi criar um projeto chamado PublicInterface do tipo ASP.NET. Em seguida cliquei com o botão direito e adicionei uma nova classe chamada ClasseCode.cs. Adicionei um namespace na classe. (Referência 1.1)

 

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

using maganer.code;

 

/// <summary>

/// Summary description for ClasseCode

/// </summary>

namespace maganer.code

{

    public class ClasseCode

    {

        public ClasseCode()

        {

            //

            // TODO: Add constructor logic here

            //

        }

 

        public String getDados()

        {

            return "valor";

        }

    }

}

 

Referência: 1.1

 

         Note que o possui um método público que retorna uma String, chamado getDados(). É um método simples, apenas para demonstração. O próximo passo foi criar uma outra classe chamada IDefault.cs, ou seja, uma interface. Adicionei o mesmo namespace para a interface. (Referência 1.2)

 

 

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

/// <summary>

/// Summary description for IDefault

/// </summary>

namespace maganer.code

{

    public interface IDefault

    {

      

        /// <summary>

        /// interface

        /// </summary>

        /// <returns></returns>

        String getDados();

    }

}

 

Referência: 1.2

 

Explicação:

 

         Note que a classe foi criada como public interface IDefault, ou seja, realmente é uma classe interface. Coloquei dentro da mesma o método criado anteriormente, porém sem o “public” String getDados().

 

         Depois de criado a interface, temos que herdá-la dentro da classe “ClasseCode”. “Basta colocar na assinatura da classe os dois pontos “:” e o nome da outra classe”. (Referência 1.3)

 

 

 

    public class ClasseCode : IDefault

    {

        public ClasseCode()

        {

            //

            // TODO: Add constructor logic here

            //

        }

 

        public String getDados()

        {

            return "valor";

        }

    }

Referência: 1.3

 

 

Explicação:

 

         Note a assinatura da classe: (Referência 1.4). A ClasseCode herda da interface Idefault.

 

 

public class ClasseCode : Idefault

 

Referência: 1.4

 

 

         Ainda falta criar uma classe responsável para retornar uma classe do tipo interface. Dentro dela, terá apenas um método do tipo público e estático. Cliquei com o botão direito do mouse em cima do projeto, escolhi a opção Add New Item. Adicionei uma classe chamada InterfaceManager.cs, coloquei o mesmo namespace namespace manager.code. (Referência 1.5)

 

 

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

/// <summary>

/// Summary description for InterfaceManager

/// </summary>

namespace maganer.code

{

    public class InterfaceManager

    {

        public InterfaceManager()

        {

            //

            // TODO: Add constructor logic here

            //

        }

 

        public static IDefault getInterface()

        {

            IDefault retorno = new ClasseCode();

            return retorno;

        }

    }

}

 

Referência: 1.5

 

Explicação:

 

         Analisando a assinatura do método, como falado anteriormente é público, estático, retorna uma interface do tipo IDefault, chama getInterface() e não recebe qualquer parâmetro de entrada.

         Dentro da classe, criei uma instância da ClasseCode() criada anteriormente, em seguida retornei a mesma.

 

         Criei a página “Default.aspx” cujo terá a função de instanciar a classe de interface e chamar o método passando pela interface. (Referência 1.6)

 

 

 

 

 

Default.aspx.cs

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        maganer.code.IDefault iDefault = maganer.code.InterfaceManager.getInterface();

        Response.Write(iDefault.getDados());

    }

}

 

Referência: 1.6

 

Explicação:

        

         Note que no método Page_Load coloquei o namespace da interface, chamando outro método getInterface(). Após referenciar chamei apenas o método encontrado na interface criado anteriormente. (Referência 1.7)

 

 

maganer.code.IDefault iDefault =

                maganer.code.InterfaceManager.getInterface();

Response.Write(iDefault.getDados());

 

Referência: 1.7

 

         Já que o método retorna um tipo String, coloquei para escrever na tela o resultado retornado. Executei o sistema e o resultado foi o esperado conforme programação desenvolvida. (Referência 1.8).

 

Referência: 1.8

 

         Segue todo código fonte abaixo das classes programadas:

 

Default.aspx.cs

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        maganer.code.IDefault iDefault = maganer.code.InterfaceManager.getInterface();

        Response.Write(iDefault.getDados());

    }

}

 

 

 

 

ClasseCode.cs

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

using maganer.code;

 

/// <summary>

/// Summary description for ClasseCode

/// </summary>

namespace maganer.code

{

    public class ClasseCode : IDefault

    {

        public ClasseCode()

        {

            //

            // TODO: Add constructor logic here

            //

        }

 

        public String getDados()

        {

            return "valor";

        }

    }

}

 

 

IDefault.cs

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

/// <summary>

/// Summary description for IDefault

/// </summary>

namespace maganer.code

{

    public interface IDefault

    {

      

        /// <summary>

        /// interface

        /// </summary>

        /// <returns></returns>

        String getDados();

    }

}

 

 

InterfaceManager.cs

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

/// <summary>

/// Summary description for InterfaceManager

/// </summary>

namespace maganer.code

{

    public class InterfaceManager

    {

        public InterfaceManager()

        {

            //

            // TODO: Add constructor logic here

            //

        }

 

        public static IDefault getInterface()

        {

            IDefault retorno = new ClasseCode();

            return retorno;

        }

    }

}

 

 

         Bom, fico por aqui e espero ter ajudado. Qualquer dúvida, favor entrar em contato pelo e-mail mauricio@aspneti.com.

 

Mauricio Junior

www.aspneti.com

www.mauriciojunior.org

 

voltar   comente  subir

 
Mauricio Junior Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog: blog.mauriciojunior.org, Site pessoal www.mauriciojunior.org



Comentários:
Comentado por: Daniel Gianni - 24/10/2006 10:39:43
Qual a vantagem prática? posso colocar atributos à interface e assim fazê-la como um verdadeiro "template" para outras classes?
Comentado por: Mauricio Junior - 24/10/2006 20:09:43
A vantagem na prática é sempre deixar uma interface gerenciar a chamada para qualquer classe. Respondendo a sua pergunta, pode sim fazê-lo como um verdadeiro template, é uma ótima idéia. Espero ter ajudado.

Comente (dê sua opinião):
Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Convertendo e salvando imagens via código
Criptografando Senha
Comunicação .NET e VB 6.0 – Parte II - usando Visual Studio.NET 2005
Vídeo - Mostrando um sistema com pocket pc
Mudar de MasterPage em Tempo de Execução
Mais um certificado Microsoft
Visual SourceSafe – Série 6
Cortando String XML
Criando a Tag Cloud em C#
Adicionando Menu no DataGridView
E-mail Carta de Amor - Vírus
Torne-se Autor de Artigos
Criando Help com Visual Studio.NET
Criando Alias no Pacote
O futuro da tecnologia com a Microsoft
User Control Windows executando no Internet Explorer (parte 2 de 2)
Dica ReportViewer
Gravando Erros com Exception - Parte I
Windows 7
Sistema de Catalogar Livros
SQL Dinâmico Compilado
Como fazer uma enquete - parte 2
Windows Form - Retornando valor entre formulários
Vírus - Full video Pamela Anderson
Saiba como fazer download de vídeo na web
Exemplos de Queries Linq
Evento BrasilDotNet 2008
Fazer Log, precisa ou não precisa?
Ebook Grátis Microsoft
Escrevendo no EventView
GridView Parte II
Sistema de Login – Parte IV
Encontrar o valor no texto
Código fonte aberto
Pegando o nome do servidor