InicioHazlo Tu MismoProgramando en C# 19
En programando en C# 19 vamos a ver interface.
Este es un tema que, conceptualmente es un poco complicado de entender para que se usa. Esta herramienta mal usada, al igual que las herencias y polimorficmo, puede hacer que el programa funcione como corresponde, pero si querés modificar algo del programa, mejor dedicate a hacer uno nuevo.
El significado de interface es aquello que une dos cosas. En algunos casos une la visión del usuario con el programa que está manejando, esa sería la interface gráfica.
En realidad usar interfaces es unir dos objetos con comportamientos iguales, pero con naturalezas distintas. O sea, la interface comunica comportamientos, pero no comunica o une objetos que son distintos entre si.
Por ejemplo, tengo la clase persona, que tiene los atributos "Nombre", "Edad", "Sexo", y nada tiene que ver con la clase Perro que tiene también los atributos "Nombre", "Edad", "Sexo".
Si bien podemos hacer una clase abstracta que establezca los métodos que necesite cada clase y se pueda hacer heredada, conceptualmente es incorrecto hacerlo, por que el objeto Perro nada tiene que ver con el objeto Persona.
Entonces ahí si hacermos una interface, que contenga inicialmente los métodos que se necesiten para modelar los comportamientos de dichos objetos.
Es así que en el ejemplo quedaría:

La interface de ejemplo la escribí así:


<?
namespace WindowsFormsApplication1
{
    interface 
INombres
    
{
        
string GetNombre(); //Lo que hago es poner los nombres de los métodos que describirán la acción.
        
string GetSexo();//No se deben poner con la sentencia "public" o "private", por que es algo genérico. 
        
string GetEdad();//Esto es como hacer una lista de acciones que se deben realizar.
    
}
}
>



El objeto Perro lo escribí así:


<?
namespace WindowsFormsApplication1
{
    class 
Perro INombres //Heredamos la interface como cualquier otra clase... ojo, si bien no funciona la multiple herencia, si se puede seguir heredando de otra clase si se hereda también de la interface.
    
{
        private 
string NombreSexoEdad;//Atributos... en persona está igual, así que no pienso comentar mucho en esa clase.

        
public void SetDatos(string Nombrestring Sexostring Edad)
        {
            
this.Nombre Nombre//El "this" está diciendo que nos referimos a la variable que tenemos en la clase. Si es "this" solo, nos referimos a la clase completa.
            
this.Sexo Sexo;
            
this.Edad Edad;
        }

        public 
string GetNombre() //Los métodos modelados en la interface se tienen que escribir completos. 
        
{
            return 
Nombre;
        }
        public 
string GetSexo() //Un detalle, puede ser cualquier cosa, lo mio es a modo de ejemplo y devolviendo datos.
        
{
            return 
Sexo;
        }
        public 
string GetEdad() 
        {
            return 
Edad;
        }
    }
}
>



El objeto Persona es igual a Perro, pero sin tanto comentario:


<?
namespace WindowsFormsApplication1
{
    class 
PersonaINombres
    
{
        private 
string NombreSexoEdad;

        public 
void SetDatos(string Nombrestring Sexostring Edad)
        {
            
this.Nombre Nombre;
            
this.Sexo Sexo;
            
this.Edad Edad;
        }

        public 
string GetNombre()
        {
            return 
Nombre;
        }
        public 
string GetSexo()
        {
            return 
Sexo;
        }
        public 
string GetEdad()
        {
            return 
Edad;
        }
    }
}
>



El formulario lo escribí así:


<?
using System
;
using System.Collections.Generic//Esto permite hacer arrays normales, comunes y corrientes.
using System.ComponentModel;
using System.Data;
using System.Collections//Esto permite hacer ArrayList, o vectores de lista, que mas adelante explicaré como funcionan, pero son vectores dinámicos.
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 
WindowsFormsApplication1
{
    public 
partial class Form1 Form
    
{
        
ArrayList ListaPerros//El ArrayList es una clase que debo instanciar.
        
ArrayList ListaPersonas;
        public 
Form1()
        {
            
InitializeComponent();
            
ListaPerros = new ArrayList(); //Si pongo un número en el paréntesis, se me crearán la cantidad de posiciones de vector que puse.
            
ListaPersonas = new ArrayList();//Cuando se llega al límite de números, los espacios se me duplican, pero no me daré cuenta de ello.
        
}                                   

        private 
void btnAgregar_Click(object senderEventArgs e)
        {
            
Perro ElPerro = new Perro(); //Instancio la clase Perro.
            
Persona LaPersona = new Persona(); //Instancio la clase Persona.
            
INombres Nomb//Inicio la instanciación de la interface. Da error si la instancio completa. Lo mismo pasa con las clases abstractas.
            
            
Form2 VentanaAgregar = new Form2(); //Hice una ventana para adquirir datos.
            
if (VentanaAgregar.ShowDialog() == DialogResult.OK//Con el botón OK toma los datos.
            
{
                
LaPersona.SetDatos(VentanaAgregar.tbNomDueñ.Text, (string)VentanaAgregar.cbSexDueñ.SelectedItemVentanaAgregar.tbEdadDueñ.Text); //Pone los datos en persona.
                
ElPerro.SetDatos(VentanaAgregar.tbNomPerr.Text, (string)VentanaAgregar.cbSexPerr.SelectedItemVentanaAgregar.tbEdadPerr.Text); //Pone los datos en perro.
                
Nomb LaPersona//El inicio de instanciación de la interface lo ocupo para decirle que los métodos que en ella estaban modelados, son los que tiene la clase que los usó, con sus datos y todo.
                
ListaPersonas.Add(Nomb);//Agrego en el Array de lista.
                
Nomb ElPerro//Sobreescribo el de perro (Ojo, no siempre es aconsejable hacerlo, pero como esto son pocos datos, me tomo el lujo de hacerlo).
                
ListaPerros.Add(Nomb);//Agrego en el Array de lista.
            
}
            
lbPerro.Items.Clear(); //Limpio los listbox que tengo para presentar los datos.
            
lbPersona.Items.Clear();
            
            for (
int p 0ListaPerros.Countp++) //Un for donde p será la posición que recorre el vector y .Count funciona como .Lenght. Ojo, no usen .Capacity, por que son las posiciones de las que justo "No me doy cuenta que tiene el vector".
            
{                
                
lbPerro.Items.Add("Nombre: " + ((INombres)ListaPerros[p]).GetNombre()); /*Acá está lo interesante, primero lo primero
                                                                                         * Cada vez que querramos usar esta clase de array, tenemos que poner entre paréntesis el tipo de objeto que buscamos que sea.
                                                                                         * La interface solo guarda los datos que ella modela, o sea que solo guardará los datos que retorna, en mi ejemplo.
                                                                                         * Si hubiera guardado todo en un mismo vector, la información hubiera sido distinta, dependiendo de la posición.**/
                
lbPerro.Items.Add("Sexo del animal: " +((INombres)ListaPerros[p]).GetSexo());
                
lbPerro.Items.Add("Edad: " + ((INombres)ListaPerros[p]).GetEdad());
                
lbPerro.Items.Add("-------------------------------------------");//Separador.
            
}

            for (
int p 0ListaPersonas.Countp++)
            {
                
lbPersona.Items.Add("Nombre: " + ((INombres)ListaPersonas[p]).GetNombre());
                
lbPersona.Items.Add("Sexo: " + ((INombres)ListaPersonas[p]).GetSexo());
                
lbPersona.Items.Add("Edad: " + ((INombres)ListaPersonas[p]).GetEdad());
                
lbPersona.Items.Add("-------------------------------------------");
            }
        }

        private 
void btnSalir_Click(object senderEventArgs e)
        {
            
Application.Exit();//Botón que cierra el programa.
        
}
    }
}
>



Para el próximo "Programando" escribiré respecto de las excepciones y su uso, así como también validaciones.
Datos archivados del Taringa! original
14puntos
1,849visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
1visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

L
Lelale🇦🇷
Usuario
Puntos0
Posts52
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.