• Sábado 4 de Mayo de 2024, 12:40

Autor Tema:  Como reutilizar el codigo  (Leído 1559 veces)

tauro78

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Como reutilizar el codigo
« en: Martes 29 de Diciembre de 2009, 18:26 »
0
Hola, quisiera saber como puedo hacer para reutilizar codigo. Por ejemplo tengo definidos distintos formularios los cuales tienen controles de tipo textBox, comboBox, etc. Entonces en algunos controles solo se deben ingresar numeros, en otros solo letras. Lo que trate de hacer y no me funciono fue lo siguiente: hice una clase ChequearTipo, una interface IChequearTipo y lo quise implementar en una forma frmCuentasAltas por medio los eventos KeyDown y KeyPress.

Debo aclarar que este codigo me tira el error: [C# Error] CuentasAltas.cs(271): 'Bancos_CSharp.ChequearTipo' does not contain a definition for 'NroEnteroKeyPress'
Esto debe ser porque frmCuentasAltas no conoce la definicion del metodo NroEnteroKeyPress que se encuentra definido en la clase ChequearTipo, es por esto que tengo la confusion.
Me gustaria saber si esta bien la manera de resolver el problema o tendria que probar de otra menera tal vez sin usar una interfase, desde ya muchas gracias.

 public interface IChequearTipo
 {
   void NroEnteroKeyPress(Object sender, KeyPressEventArgs e);
   void NroEnteroKeyDown(Object sender, KeyEventArgs e);
 }

public class ChequearTipo : IChequearTipo
   {
      public ChequearTipo()
      {
         //
         // TODO: Add constructor logic here
         //
      }

      private bool noEsNumero = false;

      void IChequearTipo.NroEnteroKeyPress(Object sender, KeyPressEventArgs e)
      {
         if (noEsNumero == true)
         {
            e.Handled = true;
         }
      }

      void IChequearTipo.NroEnteroKeyDown(Object sender, KeyEventArgs e)
      {
         noEsNumero = false;

         if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
         {
           if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
           {
             if (e.KeyCode != Keys.Back)
               {
                  noEsNumero = true;
               }
           }
         }
      }

en la forma frmCuentasAltas, lo llamo asi:

   private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
      {
         ChequearTipo ctkp = new ChequearTipo();
         IChequearTipo ICheqT = ctkp;
         ctkp.NroEnteroKeyPress(sender, e);
      }

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Como reutilizar el codigo
« Respuesta #1 en: Martes 29 de Diciembre de 2009, 20:23 »
0
Me parece que estas confundiendo el uso de interfases.

Las interfaces solo se utilizan para garantizar que debes implementar los metodos de la interfaz, y para ayudar a solventar la "limitacion" de que C# no soporta herencia multiple (o sea, que no puedes heredar de mas de una clase), pero lo que si es permitido es que una clase tenga multiples interfaces. Por esa razon, las interfases no contienen codigo, solo nombres de los metodos que debes implementar.

Puedes corregir el error que te marca cambiando la manera en como estas definiendo tu metodo en la clase ChequearTipo.

En lugar de poner:

Código: C#
  1.  
  2.         void IChequearTipo.NroEnteroKeyPress(Object sender, KeyPressEventArgs e)
  3.  
  4.  

debes poner
Código: C#
  1.  
  2.         public void NroEnteroKeyPress(Object sender, KeyPressEventArgs e)
  3.  
  4.  

De esa forma, estas definiendo el metodo NroEnteroKeyPress() que tienes en tu interfaz

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

tauro78

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Como reutilizar el codigo
« Respuesta #2 en: Martes 29 de Diciembre de 2009, 22:05 »
0
hola, entiendo lo que dices, o sea que puedo quitar la definicion de la interfaz y no tendre problemas porque la interfaz no tiene sentido. Solo con definir la clase ChequearTipo como publica la puedo llamar desde cualquier lugar. Me podrias decir entonces algun ejemplo de uso de interfaz en una aplicacion de Alta-Baja-Modificacion, porque lo que se me ocurre ahora como ejemplo de uso de interfases es la representacion de un hidroavion, gracias.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Como reutilizar el codigo
« Respuesta #3 en: Miércoles 30 de Diciembre de 2009, 00:04 »
0
Pues no se me ocurre un ejemplo con altas-bajas-modificacion, pero se me ocurre un ejemplo de animales, supon que quieres definir una clase Mamiferos, pero a la vez quieres separar los mamiferes terrestres, de los acuaticos, y los que son ambos, o sea, terrestres y acuaticos, podrias definir una clase separada para cada tipo de mamifero (MamiferoAcuatico, MamiferoTerrestre, MamiferoTerrestreAcuatico)  y de ahi heredar a cada tipo de animal, pero estarias definiendo 3 clases diferentes de mamifero dado que no se permite la herencia multiple, pero si usaras interfaces, podrias hacer algo como esto:

Código: C#
  1.  
  2.     public abstract class Mamifero
  3.     {
  4.     }
  5.     public interface Acuatico
  6.     {
  7.         void Nadar();
  8.     }
  9.     public interface Terrestre
  10.     {
  11.         void CaminarEnTierra();
  12.     }
  13.     public class Elefante : Mamifero, Terrestre
  14.     {
  15.         public void CaminarEnTierra()
  16.         {
  17.         }
  18.     }
  19.     public class Ballena : Mamifero, Acuatico
  20.     {
  21.         public void Nadar()
  22.         {
  23.         }
  24.     }
  25.  
  26.     public class Morsa : Mamifero, Acuatico, Terrestre
  27.     {
  28.         public void Nadar()
  29.         {
  30.         }
  31.         public void CaminarEnTierra()
  32.         {
  33.         }
  34.     }
  35.  
  36.  

Quizas no sea un ejemplo muy elegante, pero es el unico que se me ocurrio de momento, espero que con esto te quede mas claro.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================