Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Clases Y Metodos - C#

Iniciado por nsL, 26 de Febrero de 2006, 08:36:38 PM

« anterior - próximo »

nsL

 Hola!

Estoy tokando por primera vez c# y hace tiempo que no veo c++, asi q puede que lo que pregunte sea bastante obvio. Aun asi ahi va :P

El tema es el siguiente:

Tengo una clase (formulario windows):

public class main : System.Windows.Forms.Form
{
// Propiedades
private map Mapa; // Clase propia
private Nuevo menuNuevo; // Clase tipo System.Windows.Forms.Form

// Metodos
public void nuevo()
{
 menuNuevo = new Nuevo();
 menuNuevo.show();
}
}


En resumidas cuentas lo que tengo es un formulario, que al darle en tal sitio crea una instancia de la clase Nuevo y la muestra (show). Dentro de ese nuevo formulario quiero realizar llamadas a los metodos de la clase map.

Yo lo que usaba hasta ahora para este tipo de casos era pasar la referencia del objeto por parametro, hacer una copia en la clase y ya manejarla libremente. Es decir (otro ejemplo):

mapa.configurar(label1,label2,label3);


class mapa
{
// Propiedades
private Label lb1,lb2,lb3;

// Metodos
private void configurar (Label lab1,Label lab2, Label lab3)
{
 lb1 = lab1;
 lb2 = lab2;
 lb3 = lab3;
}
}

Guardo en la instancia de mapa una referencia a cada control o clase que uso, y luego la manejo a mi antojo.

Esto funciona pero no veo como aplicarlo para el primer caso, aprte que cuando son muchas referencias queda una chapuza pasarle mil parametros. Ademas creo recordar que en c++ habia un modificador de acceso que era friend, que permitia hacer llamadas a metodos de otras clases si tener una instancia o algo asi. He estado mirando para c# y creo que ya no lo hay, en cambio hay otro modificador que se llama Internal, q afecta a clases del mismo assembly.

¿Vosotros como organizais vuestras clases en vuestros proyectos?

Saludos!
Yo no muero hasta la muerte -

zupervaca

 No entiendo muy bien lo que quieres hacer, pero la forma en que organizo yo las cosas es que el formulario controlaria la clase mapa, es decir, en la clase mapa solo se almacenarian datos y en el formulario se hace la parte visual que mostraria esos datos y permitiria llamar a funciones de la clase mapa para modificarla.
Ejemplo:

public class mapa
{
 public int modificar( int x, int y, int tile )
 {
      this.tiles[x,y] = value;
 }
 ...
}
public class formulario : form
{
 ...
 protected OnMouseClick( sender e, eventars .....)
 {
    this.mapa.modificar(...);
    this.invalidate(...);
 }
}

Cuando hacemos click en el formulario se produciria el evento, desde esta funcion modificariamos el mapa por ejemplo, en definitiva, lo mejor es separar datos de la representacion visual.

Vicente

 Hola,

lo mismo mirar cosas del patrón MVC (Modelo-Vista-Controlador) te ayuda a como organizar tus ventanas y como se reparte la lógica y los datos ;) Un saludo!

Vicente

nsL

 A ver, he reescrito este mensaje como 10 veces, no se como explicarme :P

Te pongo un ejemplo:

Tenemos 3 clases. La primera es Main y es un Form (main.cs), la segunda es Nuevo (nuevo.cs) y es otro form, y la tercera es Mapa (mapa.cs) y (haciendote caso) es una clase propia qu contiene el array del mapa... bla bla. Dentro de main creo 2 instancias , una de Nuevo, y otra de mapa.

Arranca la aplicacion, y le damos al menu Archivo->Nuevo. Se crea la instancia de Nuevo, y se muestra como puse antes con .show(). Dentro de este formulario hay opciones de tamaños de tiles, mapa y demas. Le damos a OK y supuestamente se crea el mapa.

Como hago para que desde la clase Nuevo se modifique la clase mapa, sin tener que pasarle como parametro una referencia del objeto.


class main
{
   private Nuevo nuevoForm;
   private mapa Map;
}

class Nuevo
{
  .....
  Button botonOK;
  ....
  private void OnClickOK(...)
  {
     Map.modificaValores(....);  // Error, no se conoce Map
  }
}

class mapa
{
   public void modificaValores(...);
}


La solucion que yo uso para que no me de error y conozca a Map, es pasarle una referencia a la Clase que lo va a usar, la guarde esa referencia, y pueda hacer modificaciones cuando quiera. Lo q yo digo es si haceis esto mismo vosotros, o hay alguna otra forma para acceder a clases (instancias mas bien) y sus metodos, que no esten en tu "ambito".

No se si quedo algo mas claro :P

PD: Vicente escribiste cuando estaba yo poniendo esto :P, ahora miro eso a ver  :lol:

Saludos!
Yo no muero hasta la muerte -






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.