Algo de fundamentos teóricos

25/10/2008 - 14:24 por Hugo Nugra | Informe spam
Amigos.

Tengo dos objetos de una misma clase: ObjA y ObjB.

Existe una serie de otros objetos que "apuntan" a ObjA, ineractúan con sus
propiedades y ejecutan sus métodos. Sucede que por alguna razón, necesito
que todo lo que apunta a ObjA, ahora apunte aObjB.

Si intento con

ObjA = ObjB

todas las referencias que existían hacia ObjA, ahora apuntan a un null
(nulo), con los consabidos inconvenientes.

Si en concepto ObjA y ObjB son solamente referencias a una dirección de
memoria, quisiera saber si existe alguna manera de decirle al programa que
ahora la dirección de memoria de ObjA es la dirección de memoria de ObjB.

Este requerimirnto se pone de manifiesto cuando se instancian formularios
que han sido creados utilizando el diseñador de visual estudio, utilizando un
objeto de tipo DataSet; pues el generador de código crea una instancia del
tipo DataSet y DataBindings que lo apuntan en cada campo de datos. El
problema aparece cuando se necesita presentar el formulario pero con un
DataSet que ya existe y que ya está poblado de datos. Vendría bien una
solución como la que he planteado anteriormente.

Por cierto, yo he solucionado el problema de la presentación del formulario,
pero no de la manera que me gustaría.

Si alguien tiene algún cometario a respecto, de antemano, ¡Gracias!.

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
25/10/2008 - 15:11 | Informe spam
Hola Hugo,

El Sat, 25 Oct 2008 05:24:00 -0700, Hugo Nugra escribió:

Tengo dos objetos de una misma clase: ObjA y ObjB.

Existe una serie de otros objetos que "apuntan" a ObjA, ineractúan con sus
propiedades y ejecutan sus métodos. Sucede que por alguna razón, necesito
que todo lo que apunta a ObjA, ahora apunte aObjB.

Si intento con

ObjA = ObjB

todas las referencias que existían hacia ObjA, ahora apuntan a un null
(nulo), con los consabidos inconvenientes.



Te estás haciendo un lío. ObjA contiene una referencia y no hay ninguna
referencia hacia ObjA. Las referencias no apuntan a otras referencias. A no
ser que te pongas a trabajar con punteros de bajo nivel.

Si en concepto ObjA y ObjB son solamente referencias a una dirección de
memoria, quisiera saber si existe alguna manera de decirle al programa que
ahora la dirección de memoria de ObjA es la dirección de memoria de ObjB.



Esto está bastante mal expresado, pero si te he entendido bien lo que
quieres hacer se puede conseguir utilizando un objeto intermedio.

A y B apuntan a C y C apunta a D. Por lo tanto desde A y B se puede llegar
a D

Ahora cambias y C apunta a E, por lo tanto desde A y B se puede llegar a E.


Saludos
Alfredo
Respuesta Responder a este mensaje
#2 Luisa Goicochea
25/10/2008 - 16:04 | Informe spam
Tengo dos objetos de una misma clase: ObjA y ObjB.

Existe una serie de otros objetos que "apuntan" a ObjA, ineractúan con sus
propiedades y ejecutan sus métodos. Sucede que por alguna razón, necesito
que todo lo que apunta a ObjA, ahora apunte aObjB.

Si intento con

ObjA = ObjB

todas las referencias que existían hacia ObjA, ahora apuntan a un null
(nulo), con los consabidos inconvenientes.




Si apuntaban al mismo contenido no puede ser que apunten a null.

Ejemplo:

TextBox B = new TextBox();
TextBox A = B;
A.Name="EL MISMO B";
MessageBox.Show(A.Name);
//devuelve "EL MISMO B"
Respuesta Responder a este mensaje
#3 Luisa Goicochea
25/10/2008 - 16:13 | Informe spam
errata, el messagebox de B.Name:

MessageBox.Show(B.Name);

apuntan al mismo objeto.
Respuesta Responder a este mensaje
#4 Hugo Nugra
25/10/2008 - 23:42 | Informe spam
Gacias por responder.

Expresado en código C#, este sería el caso:

class MiFormulario : Form
{
MiDataSet miDataSet;
TextBox textBox1;

MiFormulario()
{
MiDataSet miDataSet = new MiDataSet();

BindingSource datosBindingSource = new BindingSource();
datosBindingSource.DataSource = miDataSet;
datosBindingSource.DataMember = "Datos"; // nombre de una tabla
definida en MiDataSet

TextBox textBox1 = new TextBox();
textBox1.Top = 10;
textBox1.Left = 10;
textBox1.DataBindings.Add("Text", miDataSet, "Nombre");

this.Controls.Add(textBox1);
}

public void PresentarDatos(MiDataSet otrosDatos)
{
// En este punto me gustaría saber si puedo hacer
// que todo lo que hacía referencia a miDataSet,
// ahora hiciera referencia a otrosDatos.
}
}
Respuesta Responder a este mensaje
#5 Hugo Nugra
26/10/2008 - 05:51 | Informe spam
Gracias Alfredo.

> todas las referencias que existían hacia ObjA, ahora apuntan a un null
> (nulo), con los consabidos inconvenientes.

Te estás haciendo un lío. ObjA contiene una referencia y no hay ninguna
referencia hacia ObjA. Las referencias no apuntan a otras referencias. A no
ser que te pongas a trabajar con punteros de bajo nivel.




Precisamente me refiero a eso al decir "En concepto". si bien nosotros no
trabajamos a bajo nivel, pero C# sí lo hace por nosotros. No se si
técnicamente no estoy utilizando el término apropiado al decir "referencia",
pero quiero hacer alusión a que otros objetos "apuntan" a ObjA para utilizar
sus propiedades y métodos.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida