Public Interface


por Mauricio Junior em 1/1/2011 0


    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;
        }
    }
}

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: Felipe Girão - 17/7/2008 0:00:00
Gostei muito do site e do Artigo, mas acredito que deveria ser melhor trabalhado a usabilidade. Não vejo vantagens em desabilitar o botão direito do mouse, ou a possibilidade de se poder copiar o código, pelo contrário, só vejo desvantagens.

Até essa caixa de texto que estou utilizando para digitar meu comentário tem problemas de usabilidade, estando desabilitado alguns atalhos, como: Ctrl + A

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

Vírus - Link com Vírus
Ext JS
Como fechar todos os forms de um aplicativo para dispositivo móvel
Sistema de Login em ASP – Parte III
Microsoft Mobile Explorer 3.0
O futuro da tecnologia com a Microsoft
Criando Splash - Com Efeito
Armazenando dados no ViewState – Parte I
Resource e Internacionalização – Parte V Usando Visual Studio.NET 2005
Crie a sua própria rede social no ning
Public Interface
Artigo criando atalhos para a sua aplicação.
Litl um computador web
Vídeo Sobre Atributes e String Builder com Visual Studio .NET 2005
Vídeo: Série Atlas.NET - Parte I
Sistema em ASP 3.0 utilizando 3 camadas – Parte 3
A mágica do ResolveURL
Trabalhando com GridView e DataKeyNames com Várias Chaves
Consultando CEP via WebService
Windows Phone no Brasil
Dll Ajax
WebServices usando soapHeader
Criando TreeView com Visual Studio.NET 2005 (passo 1)
Retirar Tag HTML dos campos utilizando expressão
Mobilidade e Aplicativos Mobile
CES em Las Vegas
Windows Mobile Phone
Exemplo usando try e catch
Trabalhando com GridView, RowCommand e DataKeysNames
Vídeo - Sistema de Atendimento de Clientes
Permissão de Página Utilizando Web.Config
Vídeo - Ler EventLog do Windows usando C#.NET
Windows Forms Application – Alterando Arquivo de Configuração Dinamicamente
Gravando Erros com Exception - Parte I
Popup em destaque