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