martes, 13 de diciembre de 2011

Colecciones Genéricas : "listas","pilas","colas" en C#

Listas.- Para crear una lista en colecciones genéricas tenemos que llamar al "linkedlist" que crea una lista enlazada de objetos,enteros,doubles o cadenas.
En la lista como se sabe su logica se puede insertar nodos en el frente,atras,ultimo,y de igual forma se puede eliminar en cualquier posicion.
Pilas.-  Para crear una pila en colecciones genéricas tenemos que llamar al "stack" que crea una pila de objetos,enteros,doubles o cadenas.
En la pila como sabemos su logica solo se puede insertar al comienzo y se elimina al comienzo.
cola.-  Para crear una cola en colecciones genéricas tenemos que llamar al "queue" que crea una pila de objetos,enteros,doubles o cadenas.
 En la cola como sabemos solo podemos insertar a lo ultimo y se elimina al principio.

Bueno aqui les mostrare como insertar,eliminar,invertir,mostrar el maximo elemento,el minimo elemento,y contar los objetos de una lista,pila y cola.

FrmColecciones:


public partial class btninvertir : Form
    {
        //codigo del progrmador
        //crear la lista enlazada con la coleccion generica LinkedList

        LinkedList<object> lista = new LinkedList<object> { };
        //listas de enteros
        LinkedList<int> lista2 = new LinkedList<int>();
        //pila de objetos
        Stack<object> pila = new Stack<object> { };
        object j, k, l, f;
        int b, c, d;
       
        /// <summary>
        /// /
        /// </summary>
        public btninvertir()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //añadir haciendo uso de los metodos atras y adelante de la clase LinkedList

            //inserta a lo ultimo
            lista.AddLast(23);
            //inserta al principio
            lista.AddFirst("jose");
            lista.AddFirst("maria");
            lista.AddFirst("pedro");
            lista.AddLast(100000);
            lista.AddLast(20);
            lista.AddFirst("ana");
            //elimina el objeto jose
            lista.Remove("jose");
            lista2.AddLast(5);
            lista2.AddFirst(8);
            lista2.AddLast(30);
            lista2.AddLast(23);
            // agrega el objeto juana antes del primero
            lista.AddBefore(lista.First, "juana");

            //lista.Reverse();

            // busca el minimo,maximo y suma los elementos de la lista2
            b = lista2.Max();
            c = lista2.Sum();
            d = lista2.Min();
            // cuenta los objetos agregados en la lista 1

            f = lista.Count();


            //añadir nodos creandolos primero y luego añadiendolos
            //LinkedListNode<object> nodo1 = lista.Find("maria");

            //muestra el minimo,maximo,la suma de los elementos de la lista2 y la cantidad de objetos de la lista1




        }


        private void button2_Click_1(object sender, EventArgs e)
        {

            listBox1.Items.Add("Lista1 :");
            foreach (var item in lista)
            {

                listBox1.Items.Add(item);
            }
            listBox1.Items.Add("la lista1 tiene  " + f + "  objetos");

            listBox1.Items.Add("Lista2:");
           
            foreach (var item in lista2)
            {
               
                listBox1.Items.Add(item);
            }
            listBox1.Items.Add("El maximo es:\n" + b);
            listBox1.Items.Add("la suma de la lista2 es:\n" + c);
            listBox1.Items.Add("el minimo de la lista2 es :\n" + d);

        }
        //muestra la lista invertida
        private void btninvertirlista_Click(object sender, EventArgs e)
        {
            lista = listareversa(lista);
            listBox2.Items.Add("lista invertida:");
            foreach (var s in lista)
            {
                listBox2.Items.Add(s);
            }
        }
        //invierte la lista1 y la carga
        private LinkedList<object> listareversa(LinkedList<object> listareversa)
        {
               LinkedList<object> tempa = new LinkedList<object>();
            foreach (var s in listareversa)
            {
                tempa.AddFirst(s);

            }
            return tempa;
        }
   
        //metodo que nos limpia el listbox
        private void button3_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();

            listBox2.Items.Clear();
        }

        private void btnsalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btncargarpila_Click(object sender, EventArgs e)
        {
            // el ultimo en agrergar es el primero de la pila
            pila.Push(45);
            pila.Push(12);
            pila.Push(67);
            pila.Push(123);
            pila.Push(65);
            pila.Push(111);
           
           

            //elimina el ultimo en ingresar
            pila.Pop();
            //pila.Pop();

         
            //cuenta los objetos,busca el maximo y busca el minimo
            j = pila.Count();
            k = pila.Max();
            l = pila.Min();


           


        }

        private void btnmostrarpila_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add("Pila :");
            foreach (var item in pila)
            {
                listBox1.Items.Add(item);

            }
            listBox1.Items.Add("objetos de la pila : " + j);
            listBox1.Items.Add("mayor es : " + k);
            listBox1.Items.Add("menor es : " + l);
           
        }
        //muestra la pila invertida
        private void button4_Click(object sender, EventArgs e)
        {
            pila = reversa(pila);
            listBox2.Items.Add("pila invertida:");
            foreach (var s in pila)
            {
                listBox2.Items.Add(s);
            }
           
        }
            //invierte la pila y la carga
        private Stack<object> reversa(Stack<object> pilareversa)
        {

            Stack<object> temp = new Stack<object>();
            foreach (var s in pilareversa)
            {
                temp.Push(s);

            }
            return temp;
        }

       
        }

 private void btncargarcola_Click(object sender, EventArgs e)
        {
            cola.Enqueue(7);
            cola.Enqueue(8);
            cola.Enqueue(9);
            cola.Enqueue(10);


           
        }

        private void btnmostrarcola_Click(object sender, EventArgs e)
        {
            foreach (var i in cola) {
                listBox1.Items.Add(i);
            }
            listBox1.Items.Add("#######################################");
        }

//invierte la cola
        private void button1_Click_1(object sender, EventArgs e)
        {
            foreach (var i in cola.Reverse())
            {
                listBox2.Items.Add(i);
            }
            listBox2.Items.Add("#######################################");  
        }



    }

Interfaz Grafica:




Estructuras Dinámicas "Listas Enlazadas"

Listas enlazadas.- Estructura dinámica formada por un conjunto de nodos interconectados entre si.


Esta es un aplicación creada en el lenguaje de programación C# la cual consiste en registrar los datos de un hotel,ya cea las reservas activas o las reservas canceladas y que de igual forma podamos eliminar y insertar en la parte cea necesario de la lista por ej:
insertar atrás
eliminar atrás
insertar al frente
eliminar al frente
insertar en una posición n
eliminar en una posición n
en el cual hacemos uso de varios componentes como los listbox,radiobutton,textbox,datatimepicker etc.
Para empezar crearemos el formulario reserva,luego la clase nodo,reserva,lista enlazada y por ultimo programaremos nuestros componentes que hemos utilizado en el formulario.


Clase nodo:



 public class Nodo
    {
        Object datos;//clase
        Nodo izq;
        Nodo der;
        public Nodo()
        {//nodo nulo
            datos = izq = der = null;
        }
        public Nodo(object ob)
        {// nodo solitario
            datos = ob;
            izq = der = null;


        }


        public Nodo(object ob, Nodo enlace)
        {
            datos = ob;
            der = enlace;


        }
        public void setDatos(object ob)
        {
            datos = ob;
        }
        public void setizq(Nodo ob)
        {
            izq = ob;
        }
        public void setder(Nodo ob)
        {
            der = ob;
        }


        public object getdatos()
        {
            return datos;
        }
        public Nodo getizq()
        {
            return izq; 
        }
        public Nodo getDer()
        {
            return der; 
        }
    }
}


Clase Reserva:



class Reserva
    {
        public int nro;
        public String cliente;
        public DateTime fecha_r;
        public String f_reserva;
        public String t_habitacion;
        public String f_pago;
        public String servicios;
        


        public Reserva() {
            nro = 0;
            fecha_r = DateTime.MinValue;
            cliente = t_habitacion = f_pago = servicios = "";
            
        }
        public Reserva(int n,String cli,DateTime fr,String th,String fp,String ser) {
            nro = n;
            cliente = cli;
            fecha_r = fr;
            t_habitacion = th;
            f_pago = fp;
            servicios = ser;
        }
        public void  SetReserva(int n, String cli, DateTime fr, String th, String fp, String ser)
        {
            nro = n;
            cliente = cli;
            fecha_r = fr;
            t_habitacion = th;
            f_pago = fp;
            servicios = ser;
        }
        public void setnro(int n) { nro = n; }
        public void setcliente(String cli) { cliente = cli; }
        public void setfechareserva(DateTime fr) { fecha_r = fr; }
        public void setthabitacion(String th) { t_habitacion = th; }
        public void setfpago(String fp) {f_pago = fp; }
        public void setservicios(String ser) { servicios = ser; }


        public String GetReserva() {
            return "Nro:" + nro + "\nCliente:" + cliente + "\nFecha de Reserva:" + f_reserva + "Tipo de Habitacon:" + t_habitacion +
                    "\nForma de Pago:" + f_pago + "\nServicios:" + servicios;
        }


        public int getnro() { return nro; }
        public String getcliente() { return cliente;}
        public String getfechareserva() { return f_reserva; }
        public String getthabitacion() { return t_habitacion; }
        public String getfpago() { return f_pago; }
        public String getservicios() { return servicios; }
    }
}

Clase Lista Enlazada:

class ListaEnlazada
    {
        protected String nombre;
        protected Nodo primero;
        protected Nodo ultimo;

        public ListaEnlazada(String n) {
            nombre = n;
            primero = ultimo = null;  
        }
        public ListaEnlazada() {
            this.nombre = "Lista";
        }
        //metodos
        public Boolean Lvacia() {
            return primero == null;
        }
        public String getnombre(){
        return nombre;
        }
        public Nodo getprimero() {
            return primero;
        }
        public Nodo getultimo() {
            return ultimo;
        }
        public void InsertFrente(Object obj) {

            if (Lvacia())
                primero = ultimo = new Nodo(obj);
            else
                primero= new Nodo(obj,primero);
        }
        public void InsertarAtras(Object obj) {
            if (Lvacia())
                primero = ultimo = new Nodo(obj);
            else
                ultimo = ultimo.Sgte = new Nodo(obj);
        
        }
        public Object DeleteFrente() {
            Object DatoRemovido = null;
            if (Lvacia())
                Console.WriteLine("Vacia");
                primero = primero.datos;
                if (primero.Equals(ultimo))
                    primero = ultimo = null;
                else
                    primero = primero.Sgte;
                return DatoRemovido;
        }
        public Object DeleteAtras() {
            Object DatoRemovido = null;
            if (Lvacia()) {
                Console.WriteLine("Vacia");
            }
            DatoRemovido = ultimo.Datos;
            if (primero.Equals(ultimo))
            {
                primero = ultimo = null;
            }
            else {
                Nodo Actual = primero;
                while (Actual.Sgte != ultimo)
                    Actual = Actual.Sgte;
                ultimo = Actual;
                Actual.Sgte = null;
            }
            return DatoRemovido;
        }
        public Object getElementoIndice(int posicion) {
            if (Lvacia())
            {
                return null;
            }
            else {
                Nodo Actual = primero;
                int cont = 1;
                while ((Actual != null) && (cont < posicion)){
                    Actual = Actual.Sgte;
                    cont++;
                }
                if ((Actual != null) && (cont == posicion))
                {
                    return Actual.Datos;
                }
                else {
                    return null;
                }


            }
        
        }

        public void InsertarElementoEnIndice(int posicion,Object obj){
        Nodo nuevo;
        Nodo actual;
        if (Lvacia())
        {
            return;
        }
        else {
            actual = primero;
            int cont = 1;
            while((actual !=null) && (cont < posicion-1)){
                actual = actual.Sgte;
                cont++;
            }
            if((actual != null) && (cont== posicion-1)){
                nuevo = new Nodo(obj,actual.Sgte);
                actual.Sgte = nuevo;
            
            }
          }
        
        }
        public Object DeleteElementoDeIndice(int posicion) {
            Object DatoRemovido;
            Nodo actual;

            if (Lvacia() == true)
            {
                return null;
            }
            else {
                if (posicion == 1)
                {
                    DatoRemovido = primero.Datos;
                    primero = primero.Sgte;
                    return DatoRemovido;
                }
                else {
                    actual = primero;
                    int cont = 1;

                    while((actual != null) && (cont < posicion-1)){
                        actual = actual.Sgte;
                        cont++;
                    }
                    if ((actual != null ) && (cont == posicion -1)){
                        DatoRemovido = actual.Sgte.Datos;
                        actual.Sgte = actual.Sgte.Sgte;
                        return DatoRemovido;
                    }

                }
                return null;
            }
        
        }

    }
}

FrmReserva:

public partial class FrmReserva : Form
    {

        public void combohabitacion() {
            cbthabitacion.Items.Add("Simple");
            cbthabitacion.Items.Add("doble");
            cbthabitacion.Items.Add("Suite");
        }
        public String formapago() {
            String fp = "";
            if (rbefectivo.Checked == true)
                fp = rbefectivo.Text;
            else
                fp = rbtargeta.Text;
            return fp;
         }
        public String obtenerservicios() {
            String serv = "";
            if (chkinternet.Checked == true)
                serv = serv + chkinternet.Text + ",";
            if (chkpiscina.Checked == true)
                serv = serv + chkpiscina.Text + ",";
            if (chkrestaurant.Checked == true)
                serv = serv + chkrestaurant.Text + ",";
            return serv;
        }
        public void limpiardatos() {
            txtnro.Text = "";
            txtcliente.Text = "";
        }
        public void mostrarlista() {
            if (Lista.Lvacia() == true)
            {
                lbactivas.Items.Clear();
                lbactivas.Items.Insert(0, "Lista vacia");
            }
            else {
                Nodo auxnodo = Lista.getprimero();

                lbactivas.Items.Clear();
                while (auxnodo != null) { 
                auxdatos = (Reserva)auxnodo.getdatos();
                String separador = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.";
                lbactivas.Items.Insert(0,auxdadatos.getnro());
                lbactivas.Items.Insert(1, auxdadatos.getcliente());
                lbactivas.Items.Insert(2, auxdadatos.getthabitacion());
                lbactivas.Items.Insert(3, auxdadatos.getfechareserva());
                lbactivas.Items.Insert(4, auxdadatos.getfpago());
                lbactivas.Items.Insert(5, auxdadatos.getservicios());
                lbactivas.Items.Insert(6, separador);
                auxnodo = auxnodo.sgte;

                
                }
            
            }

        
        }

        public FrmReserva()
        {
            InitializeComponent();
        }

        private void FrmReserva_Load(object sender, EventArgs e)
        {
            combohabitacion();

        }

        private void groupBox2_Enter(object sender, EventArgs e)
        {

        }

        private void groupBox4_Enter(object sender, EventArgs e)
        {

        }

        private void btnsalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btninsertarfrente_Click(object sender, EventArgs e)
        {
            String nro = "";
            String cliente = "";
            String tipohab = "";
            DateTime fecha = DateTime.MinValue;
            String formapago = "";
            String serv = "";

            int centinela = 1;
            try
            {

                nro = txtnro.Text;
                cliente = txtcliente.Text;
                tipohab = cbthabitacion.Text;
                fecha = DateTime.Parse(dtpfreserva.Text);
                formapago = ObtenerFormaPago();
                serv = obtenerservicios();
            }
            catch (Exception Ex)
            {
                centinela = 0;
                if (MessageBox.Show(Ex.ToString() + "Ocurrio un error verifique los campos ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK) { 
                

                }
            }
            if (centinela == 1) {
                Lista.InsertFrente(new Reserva(nro,cliente,tipohab,fecha,formapago,serv));
            }
            limpiardatos();
            mostrarlista();
        }

        private void btnmostrar_Click(object sender, EventArgs e)
        {
            mostrarlista();
        }

        private void btnborrarfrente_Click(object sender, EventArgs e)
        {
            if (Lista.Lvacia() == true) {
                lbcanceladas.Items.Clear();
                lbcanceladas.Items.Insert(0,"Lista Vacia"):
            
            }
            else{
            Reserva aux;
                aux=(Reserva)Lista.DeleteFrente();

                String separador="$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$";
                lbcanceladas.Items.Insert(0, aux.getnro());
                lbcanceladas.Items.Insert(1, aux.getcliente());
                lbcanceladas.Items.Insert(2, aux.getthabitacion());
                lbcanceladas.Items.Insert(4, aux.getfechareserva());
                lbcanceladas.Items.Insert(3, aux.getfpago());
                lbcanceladas.Items.Insert(5, aux.getservicios());
                lbcanceladas.Items.Insert(6, separador);
            
            }
            limpiardatos();
            mostrarlista();
        }

        private void btninsertaratras_Click(object sender, EventArgs e)
        {
            String nro = "";
            String cliente = "";
            String tipohab = "";
            DateTime fecha = DateTime.MinValue;
            String formapago = "";
            String serv = "";
            int centinela = 1;
            try
            {

                nro = txtnro.Text;
                cliente = txtcliente.Text;
                tipohab = cbthabitacion.Text;
                fecha = DateTime.Parse(dtpfreserva.Text);
                formapago = ObtenerFormaPago();
                serv = obtenerservicios();
            }
            catch (Exception Ex)
            {
                centinela = 0;
                if (MessageBox.Show(Ex.ToString() + "Ocurrio un error verifique los campos ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                {
                }
              }
            if (centinela == 1) {
                Lista.InsertarAtras(nro,cliente,tipohab,fecha,formapago,serv);
            
            }
            limpiardatos();
            mostrarlista();


        }

        private void btnborraratras_Click(object sender, EventArgs e)
        {
            if (Lista.Lvacia() == true)
            {
                lbcanceladas.Items.Clear();//limpia por completo el listbox
                lbcanceladas.Items.Insert(0, "Lista vacia");//inserta el object al indice 0
            }
            else {
                Reserva aux;
                aux = (Reserva)Lista.DeleteAtras();//elimina el ultimo dato introducido en la pila

                String separador = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$";
                lbcanceladas.Items.Insert(0, aux.getnro());
                lbcanceladas.Items.Insert(1, aux.getcliente());
                lbcanceladas.Items.Insert(2, aux.getthabitacion());
                lbcanceladas.Items.Insert(4, aux.getfechareserva());
                lbcanceladas.Items.Insert(3, aux.getfpago());
                lbcanceladas.Items.Insert(5, aux.getservicios());
                lbcanceladas.Items.Insert(6, separador);
            }
            limpiardatos();
            mostrarlista();
        }

        private void btninsertarpos_Click(object sender, EventArgs e)
        {
            String nro = "";
            String cliente = "";
            String tipohab = "";
            DateTime fecha = DateTime.MinValue;
            String formapago = "";
            String serv = "";
            int centinela = 1;
            try
            {

                nro = txtnro.Text;
                cliente = txtcliente.Text;
                tipohab = cbthabitacion.Text;
                fecha = DateTime.Parse(dtpfreserva.Text);
                formapago = ObtenerFormaPago();
                serv = obtenerservicios();
            }
            catch (Exception Ex) {
                centinela = 0;
                if (MessageBox.Show(Ex.ToString() + "Ocurrio un error verifique los datos ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                {
                }
                }
            if (centinela == 1) {

                lista.insertarElementoEnIndice(indice, (new Reserva(nro,cliente,tipohab,fecha,formapago,ser)));
             //se introduce el objeto de tipo de datos

            }
            limpiardatos();
            mostrarlista();

        }

        private void btnborrarposicion_Click(object sender, EventArgs e)
        {

            if (Lista.Lvacia() == true)
            {
                lbcanceladas.Items.Clear();//limpia por completo el listbox
                lbcanceladas.Items.Insert(0, "Lista vacia");//inserta el object al indice 0
            }
            else {
                Reserva aux = new Reserva();
                int centinela ==1;
                try{
                
                   aux=(Reserva)lista.DeleteElementoDeIndice(int.Parse(txtposicion.Text));
                }
                catch(Exception Ex){


                if (MessageBox.Show(Ex.ToString() + "Ocurrio un error verifique los datos ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                {
                }
                }
                if(centinela==1){
                tring separador = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$";
                lbcanceladas.Items.Insert(0, aux.getnro());
                lbcanceladas.Items.Insert(1, aux.getcliente());
                lbcanceladas.Items.Insert(2, aux.getthabitacion());
                lbcanceladas.Items.Insert(4, aux.getfechareserva());
                lbcanceladas.Items.Insert(3, aux.getfpago());
                lbcanceladas.Items.Insert(5, aux.getservicios());
                lbcanceladas.Items.Insert(6, separador
                }
            }
            limpiardatos();
            mostrarlista();
        }

        private void btnreservar_Click(object sender, EventArgs e)
        {
            btninsertaratras_Click(sender,e);
        }

        private void btncancelar_Click(object sender, EventArgs e)
        {
            btnborraratras_Click(sender ,e);
        }


    }
}

Bueno ese seria todo nuestro código fuente de nuestro programa para terminar con nuestra aplicación les mostrare la interfaz gráfica:




miércoles, 30 de noviembre de 2011

Arreglos y Estructuras en c#

Vectores y estructuras en C#
Bueno lo primero que vamos hacer es crear un formulario que se pueda introducir el código, descripción ,fecha de compra cantidad.
Luego creamos los botones estruc que va guradar la estructura que creemos y lo va almacenar en un datagrip y de igual forma creamos el boton arecglo que va ser un vector que va almacenar los datos y de la misma forma lo va mostrar en un data grip como ce ve en la sgte imagen :

Bueno de esa forma quedara nuestro formulario,el siguiente paso seria programar los botones struct , arreglo y el botón salir.
código fuente
Botón struct:

 //creamos la estructura que contenga todo el constructor que necesitamos
struct articulo {
            public int codigo;
            public String descripcion;
            public DateTime fechacompra;
            public int cantidad;

            public articulo(int c, String no, DateTime fe,int can) {
                codigo = c;
                descripcion = no;
                fechacompra = fe;
                cantidad = can;
            }
Luego programamos el boton struct y lo mostramos en un datagrip:
private void btnEstructura_Click(object sender, EventArgs e)
        {
            try
            {
                articulo A = new articulo(int.Parse(txtCodigo.Text), txtDescripcion.Text, DateTime.Parse(dtpFecha.Text), int.Parse(txtCantidad.Text));

                String[] cad = new String[] { A.codigo.ToString(), A.descripcion, A.fechacompra.ToShortDateString(), A.cantidad.ToString() };
                dgVista.Rows.Add(cad);
            }
            catch(Exception ex){
                MessageBox.Show(ex.ToString());
            }
        }

Botón
 Arreglo:

/// i inicia en cero ver arriba la declaracion de i=0
            /// 
            //for?'
            try
            {
                Vec[i].codigo = int.Parse(txtCodigo.Text);
                Vec[i].descripcion = txtDescripcion.Text;
                Vec[i].fechacompra = DateTime.Parse(dtpFecha.Text);
                Vec[i].cantidad = int.Parse(txtCantidad.Text);

                String[] cad = new String[] { Vec[i].codigo.ToString(), Vec[i].descripcion, Vec[i].fechacompra.ToShortDateString(), Vec[i].cantidad.ToString() };
                dgVista.Rows.Add(cad);

                ////////ojooooooo

                i++;
            }
            catch (Exception ex) {

                MessageBox.Show(ex.ToString(), "Error");
            }

            //------ojoooooooo

        }

Por ultimo programamos el botón salir:

Botón
 salir:

this.close();











lunes, 10 de octubre de 2011

Herencias en C#

Definicion: El mecanismo de herencia es uno de los pilares fundamentales en los que se basa la programación  orientada a objetos. Es un mecanismo que permite definir nuevas clases a partir de otras ya definidas de modo que si en la definición de una clase indicamos que ésta deriva de otra, entonces la primera -a la que se le suele llamar clase hija- será tratada por el compilador automáticamente como si su definición incluyese la definición de la segunda –a la que se le suele llamar clase padre o clase base.
Ej:

Clase madre"Clase persona":
namespace Herencia
{
    class Persona {

        protected String nombre;
        protected String ci;
        
        public Persona() {
            nombre = ci = "";
        }
        public Persona(String n,String c) {

            nombre = n;
            ci = c;
        }
        public void SetPersona(String n, String c)
        {
            nombre = n;
            ci = c;
        }

        public String GetPersona() {

            return "Nombre: " + nombre + "\nCI: " + ci;
        }

    }

}
Clases derivadas o hijas
clase Empleado:

 class Empleado:Persona{

        protected String salario;
        protected String cargo;
        protected DateTime fnacimiento;
        protected int edad;
        

        public Empleado():base(){
            cargo = "";
            salario = "";
            fnacimiento = DateTime.MinValue;
            
        }

        public Empleado(String n,String c,String ca,String s,DateTime fn):base(n,c){
            salario = s;
            cargo = ca;
            fnacimiento = fn;
                
        }
        public void SetEmpleado(String n, String c, String ca, String s,DateTime fn){
            base.SetPersona(n,c);
            
            salario = s;
            cargo = ca;
            fnacimiento = fn;
      }
        
        
        public String GetEmpleado() {
            edad = DateTime.Now.Year - fnacimiento.Year;
            return base.GetPersona() + "\nCargo: " + cargo + "\nSalario: " + salario+"\nFecha De Nacimiento:"+fnacimiento.ToLongDateString()+"\nEdad: "+edad;
        
        }
    }
}
Clase Estudiante:
 class Estudiante :Persona{
       
       protected DateTime fnacimiento;
       protected int edad;
       public int ru;
       protected String carrera;
       protected DateTime f_ingreso;
       protected double nparcial;
       protected double npractica;
       protected double nfinal;
       protected double promedio;
       protected int antiguedad; 



       public Estudiante() : base() {

           
           fnacimiento = DateTime.MinValue;
           ru = 0;
           carrera = "";
           f_ingreso = DateTime.MinValue;
           nparcial = npractica = nfinal = 00;
           
           
           
       }

       public Estudiante(String n,String c,DateTime fn,int ru,String car,DateTime fing,double npa,double npr,double nf):base(n,c) {
           base.SetPersona(n,c);
           fnacimiento = fn;
           this.ru = ru;
           carrera = car;
           f_ingreso = fing;
           nparcial = npa;
           npractica = npr;
           nfinal = nf;
       }


       public void SetEstudiante(String n, String c, DateTime fn, int r, String car, DateTime fing, double npa, double npr, double nf)
       {

           base.SetPersona(n,c);
           
           fnacimiento = fn;
           ru = r;
           carrera = car;
           f_ingreso = fing;
           nparcial = npa;
           npractica = npr;
           nfinal = nf;

       }
       public String GetEstudiante() {

           edad = DateTime.Now.Year - fnacimiento.Year;
           antiguedad = DateTime.Now.Year - f_ingreso.Year;    
           return base.GetPersona() +  "\nFecha de Nacimiento: "+fnacimiento.ToLongDateString()+"\nEdad:"+edad
               +"\nRU:"+ru+"\nCarrera: "+carrera+"\nFecha de Ingreso: "+f_ingreso.ToLongDateString()+"\nNota Parcial: "+nparcial
               +"\nNota Practica: "+npractica+"\nNota Final: "+nfinal+"\nAntiguedad: "+antiguedad;
       
       }

       public String getnombre() {
           return nombre;
       }
       public String   getci()
       {
           return ci ;
       }
       public DateTime getfnacimiento()
       {
           return fnacimiento;
       }
       public int getedad()
       {
           return edad;
       }
       public int getru()
       {
           return ru;
       }
       
       public String getcarrera()
       {
           return carrera;
       }
       public DateTime getfingreso()
       {
           return f_ingreso;
       }
       public double getnparcial()
       {
           return nparcial;
       }
       public double getnpractico()
       {
           return npractica;
       }
       public double getnfinal()
       {
           return nfinal;
       }
       public double getnpromedio()
       {
           return promedio;
       }
       public int getantiguedad() {
           return antiguedad;
       }
       
       public double Calcularpromedio() {
           return promedio=(nparcial * 0.35) + (npractica * 0.35) + (nfinal * 0.30);
       
       }
    }
}
Form1:


En este formulario enlazamos los dos formularios que hemos creado el frmEstudiante y frmEmpleado.

FrmEstudiante:

CÓDIGO FUENTE:

public partial class FrmEstudiante : Form
    {


        public void Combocarrera() {
            cbcarrera.Items.Add("Ingenieria de sistemas");
            cbcarrera.Items.Add("Ingenieria Agronoma");
            cbcarrera.Items.Add("Ingenieria Civil");
            cbcarrera.Items.Add("Derecho");
            cbcarrera.Items.Add("Bioquimica");
        
        }

        public void limpiar() {
            txtnombreE.Clear();
            txtciE.Clear();
            txtru.Clear();
            txtnparcial.Clear();
            txtnpractica.Clear();
            txtnfinal.Clear();
         
           
        
        }
        public FrmEstudiante()
        {
            InitializeComponent();
        }

        private void FrmEstudiante_Load(object sender, EventArgs e)
        {
            Combocarrera();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                Estudiante Es = new Estudiante((txtnombreE.Text), (txtciE.Text), DateTime.Parse(dtpfn.Text), int.Parse(txtru.Text), cbcarrera.Text, DateTime.Parse(dtpingreso.Text), double.Parse(txtnparcial.Text), double.Parse(txtnpractica.Text), double.Parse(txtnfinal.Text));
                MessageBox.Show(Es.GetEstudiante()+"\nPromedio: "+Es.Calcularpromedio(), "Datos del Estudiante");
                String[] fila=new String[] {Es.getnombre(),Es.getci(),Es.getru().ToString(),Es.getfnacimiento().ToShortDateString(),Es.getcarrera(),Es.getnparcial().ToString(),Es.getnpractico().ToString(),Es.getnpromedio().ToString(),Es.getnfinal().ToString(),Es.getedad().ToString(),Es.getfingreso().ToShortDateString(),Es.getantiguedad().ToString()};
                dataGridView1.Rows.Add(fila);
                limpiar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "ERROR");
            }
           
            
            }
            
            }

        }
    
FrmEmpleado:



Codigo fuente:

public partial class FrmEmpleado : Form
    {

        public void Combocargo() {

            cbcargo.Items.Add("Abogado");
            cbcargo.Items.Add("Ingeniero");
            cbcargo.Items.Add("Secretaria");
            cbcargo.Items.Add("Mensajero");
    
        
        }

        public void Combosalario() {
            cbsalario.Items.Add("1000 Bs");
            cbsalario.Items.Add("2000 Bs");
            cbsalario.Items.Add("3000 Bs");
            cbsalario.Items.Add("4000 Bs");
        
        
        }
        public FrmEmpleado()
        {
            InitializeComponent();
        }

        private void FrmEmpleado_Load(object sender, EventArgs e)
        {
            Combocargo();
            Combosalario();
            
        }

        private void cbcargo_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void btnsalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnmostrar_Click(object sender, EventArgs e)
        {
            try {

                Empleado Em = new Empleado((txtnombre.Text),(txtci.Text),cbcargo.Text,cbsalario.Text,DateTime.Parse(dtpfecha.Text));
                MessageBox.Show(Em.GetEmpleado(),"Datos del Empleado");
                
             }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "ERROR");
            }
            
        }

    }
}









Programación visual en C#

Clases compuestas:
Son aquellas clases que tienen como tipo de atributo a otra clase
a continuación veremos un ejemplo de una clase compuesta:
CLASE DISCO DURO:

  class DiscoDuro
    {
        private int nplatos;
        private String capacidad;
        private String fabricanteDD;


        //--------------------------------
        DiscoDuro() {
            nplatos = 0;
            capacidad = fabricanteDD = "";
        }


        public DiscoDuro(int np,String ca,String fa) {
            nplatos = np;
            capacidad = ca;
            fabricanteDD = fa;
            
        }
        public void setDiscoDuro(int np, String ca, String fa)
        {
            nplatos = np;
            capacidad = ca;
            fabricanteDD = fa;
        }
        public String getDiscoDuro() {
        
            return "NPlatos:"+nplatos+"\nCapacidad:"+capacidad+"\nFabricante:"+fabricanteDD;
        }


    }
}


CLASE TARJETA MADRE:

 class TarjetaMadre
    {
        private int NRanurasPCI;
        private int NRanurasAGP;
        private String fabricante;
        private int NPuertosUAB;


        public TarjetaMadre() {
            NRanurasAGP = NRanurasPCI = NPuertosUAB = 0;
            fabricante = "";
        }


        public TarjetaMadre(int pci,int agp,String fa,int usb ) {
            NRanurasPCI = pci;
            NRanurasAGP = agp;
            fabricante = fa;
            NPuertosUAB = usb;
        }
        public void setTarjetaMadre(int pci, int agp, String fa, int usb)
        {
            NRanurasPCI = pci;
            NRanurasAGP = agp;
            fabricante = fa;
            NPuertosUAB = usb;
        }
        public String getTarjetaMadre() {
            return "\nPCI:" + NRanurasPCI + "\nAGP" + NRanurasAGP + "\nFabricante:" + fabricante + "\nUSB:" + NPuertosUAB;
        }
    }
}


CLASE PROCESADOR:
class Procesador{
        public String frecuencia;
        public String fabricante;

        public Procesador() {
            frecuencia = fabricante = "";
        }
        public Procesador(String fre,String fa){
            frecuencia =fre;
            fabricante = fa;
        }
        public void SetProcesador(String fre, String fa){
            frecuencia = fre;
            fabricante = fa;
        }
        public String GetProcesador() {
            return "Frecuencia:" + frecuencia + "\nFabricante:" + fabricante;
        }

    }
}
CLASE COMPUTADOR: 
La clase computador es la clase principal de donde sus tipos de atributos pertenecen a una clase.
 class Computadora
    {
        private TarjetaMadre tm;
        private DiscoDuro dd;
        private DateTime fecha;

        //-----------------------

        public Computadora() {
            tm = new TarjetaMadre();
            dd = new DiscoDuro(0, "", "");
            fecha = DateTime.MinValue;
        }

        public Computadora(int pci, int agp, String fa, int usb, int np, String ca, String fab, DateTime fe)
        {
            tm = new TarjetaMadre(pci, agp, fa, usb);
            dd = new DiscoDuro(np, ca, fab);
            fecha = fe;
        }


        //---------------------------
        public void setComputadora(int pci, int agp, String fa, int usb, int np, String ca, String fab,DateTime fe)
        {
            tm = new TarjetaMadre(pci, agp, fa, usb);
            dd = new DiscoDuro(np, ca, fab);
            fecha = fe;
        }

        public String getComputadora() { 
            return "\nTarjeta:"+tm.getTarjetaMadre()+"\nDisco Duro:"+dd.getDiscoDuro()+"\nFEcha Compra:"+fecha.ToLongDateString();
        }
    }
}
Formulario1:
En este formulario se enlaza todos los demás formularios que deseemos crear,  añadiendo un menú y se hace de esta manera:

private void computadoraToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmComputadora pc = new frmComputadora();
            pc.Show();
        }
FORMULARIO COMPUTADORA:
En este formulario agregamos 2 group box y de a una etiqueta para cada combo box , text box y date time picker, luego programamos el boton salir y el boton crear para que nos muestre todo los datos que introduscamos.


BOTÓN 
 SALIR:


 private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

BOTÓN
CREAR:
 private void btnCrear_Click(object sender, EventArgs e)
        {
            try
            {
                Computadora pc = new Computadora(int.Parse(txtPCI.Text), int.Parse(txtAGP.Text), cbFabTarjeta.Text, int.Parse(txtUSB.Text),int.Parse(txtNPlatos.Text),cbCapacidadDD.Text,cbFabricanteDD.Text, DateTime.Parse(dtpFecha.Text));
                MessageBox.Show(pc.getComputadora(), "Datos de la Computadora");
            }
            catch (Exception ex) {
                MessageBox.Show(ex.ToString(),"ERROR");
            }
        }
LLENADO DE LOS COMBO BOX:
 public partial class frmComputadora : Form
    {

        //-------metodos propios

        public void ComboFabricanteTarjeta() {
            cbFabTarjeta.Items.Add("AsRock");
            cbFabTarjeta.Items.Add("Intel");
            cbFabTarjeta.Items.Add("PCChip");
        
        }

        public void ComboCapacidadDD() {
            cbCapacidadDD.Items.Add("80 Gb");
            cbCapacidadDD.Items.Add("160 Gb");
            cbCapacidadDD.Items.Add("320 Gb");
            cbCapacidadDD.Items.Add("500 Gb");
        }


        public void ComboFabricanteDD() {
            cbFabricanteDD.Items.Add("Samsung");
            cbFabricanteDD.Items.Add("Maxtor");
            cbFabricanteDD.Items.Add("Seagate");
        }



Luego los llamamos en la función load para cuando ejecute nuestra aplicación cargue nuestros combo box