Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda De C#

Iniciado por Helius, 20 de Agosto de 2005, 03:43:07 PM

« anterior - próximo »

Helius

 Necesito tener en una clase una referencia a un entero (o lo que sea) que pertenece a otra clase.

Me explico, quiero hacer que cuando se cree la instancia de una clase A se le pase por el constructor una referencia a un entero, que podría ser de una clase B, y la guarde como miembro para poder acceder a ella luego. Necesito que cuando se cambie el valor en B, la clase A acceda al valor actualizado claro.

Esto es muy fácil hacerlo en C++ pero no consigo hacerlo en C#  :(

Ahora mismo tengo esto pero no me funciona, si cambio el valor en B se queda el viejo en A:

class A
{
   Object referencia;

   A(Object r)
   {
       referencia = r;
   }

   AccederReferencia()
   {
       int entero = (int) referencia;
   }
}

class B
{
   int entero = 10;

   MiFuncion()
   {
       new A(entero);
       entero++;
   }
}

       
Geardome Devlog
Tutoriales sobre DirectX 9, Nintendo DS y PSP.

zupervaca

 public class A
{
public A(ref Object dato)
{
this.dato = dato;
}
public Object dato;
}

El ref te sirve para asegurar que se pasa por referencia, ya que los tipos de datos basicos o estructuras se copian, si es una clase deberia de funcionarte siempre incluso sin el ref, no obstante en c# es aconsejable usar templates para estos casos, eso si he entendido tu problema

saludos

editado: viendo el post de Warchief ahora entiendo tu problema correctamente, efectivamente debes de crear una clase en la que metas en entero, haz esto solo si es un tipo de dato basico o una estructura

Warchief

 Hace mucho que trabajé con C# y no recuerdo bien, pero ¿no faltaría una clase que encapsule al entero?


class MiEntero
{
  int valor;
}


Siendo entonces:


class A
{
 MiEntero ref;

 A(MiEntero r)
 {
     ref = r;
 }

 Acceso()
 {
     int valor = ref.valor;
  }
}



Creo que en java lo hacía así.  :unsure:  

Helius

 Se supone que haciendo boxing y unboxing no es necesario clases que encapsulen a un entero ¿no?

Mi problema es que para más complicación la clasa A debe ser genérica y no tiene porque aceptar precisamente enteros, debería poder aceptar cualquier cosa...

Edito:

Debería ser exáctamente así:

class A <T>
{
  Object referencia;

  A(Object r)
  {
      referencia = r;
  }

  AccederReferencia()
  {
      T dato= (T) referencia;
  }
}

class B
{
  int entero = 10;

  MiFuncion()
  {
      new A<int>(entero);
      entero++;
  }
}
Geardome Devlog
Tutoriales sobre DirectX 9, Nintendo DS y PSP.

zupervaca

 el boxing y el unboxing precisamente crea objetos envoltorio en TIEMPO DE EJECUCION con lo que sera mas lento que si lo haces tu a mano

saludos

Helius

 Oopss, pero acabo de leer aquí http://www.codeproject.com/csharp/boxing.asp que el boxing crea una COPIA del valor de la variable que empaqueta y la pasa al heap, por eso no me funciona...

Parece que no se puede obtener de ninguna manera un dirección a una variable normal o un struct... Creo que no me queda más remedio que hacerme las clases envoltorio.  :(  
Geardome Devlog
Tutoriales sobre DirectX 9, Nintendo DS y PSP.






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.