Ver Mensaje Individual
  #6 (permalink)  
Antiguo 30/10/2010, 18:35
raululm
 
Fecha de Ingreso: junio-2009
Mensajes: 10
Antigüedad: 14 años, 10 meses
Puntos: 0
Información Respuesta: Asignar una instancia de una clase a otra desde dentro de la ultima clase

Ya lo he conseguido resolver, a través de "System.Reflection", tras bucear mucho por la web he encontrado este "Namespace" por el cual se puede tener acceso a las propiedades, campos, eventos, métodos, etc... de un objeto/clase.

El código queda de la siguiente forma:

Código vb:
Ver original
  1. 'Recordad que antes de la declaración de la clase hay que añadir la
  2. 'referencia a System.Reflection:
  3. 'Imports System.Reflection
  4.  
  5. Public Function Cargar() As Boolean
  6.         ' Declaro una instancia de la misma clase
  7.        Dim Objeto As cConfiguracion
  8.         ' Recupero la configuración guardada en el archivo
  9.        'y lo almaceno en "Objeto"
  10.        If File.Exists(_archivo) Then
  11.             Try
  12.                 fs = File.OpenRead(_archivo)
  13.                 seriador = New BinaryFormatter
  14.                 Objeto = CType(seriador.Deserialize(fs), cConfiguracion)
  15.                 Cargar = True
  16.             Catch ex As Exception
  17.                 Throw New Exception("No se puede cargar la configuración" & vbNewLine & ex.Message)
  18.             Finally
  19.                 fs.Close()
  20.             End Try
  21.         Else
  22.             Throw New Exception("No existe el archivo de configuración")
  23.             Return False
  24.         End If
  25.         ' Ahora asigno los valores a la clase original
  26.        ' Mediante el Namespace Reflection recupero las variables
  27.        ' También se pueden recuperar las propiedades, etc... pero en este caso no es necesario
  28.        Dim tipo As Type = GetType(cConfiguracion)
  29.         Dim limites As BindingFlags = BindingFlags.Instance _
  30.                         Or BindingFlags.Public _
  31.                         Or BindingFlags.DeclaredOnly _
  32.                         Or BindingFlags.Static _
  33.                         Or BindingFlags.NonPublic
  34.         Dim campos As FieldInfo() = tipo.GetFields(limites)
  35.         For Each campo As FieldInfo In campos
  36.             'Solo quiero asignar las variables "Serializables"
  37.            If Not campo.IsNotSerialized Then
  38.                 'FieldInfo.SetValue(instancia,valor)
  39.                'FieldInfo.GetValue(instancia)
  40.                campo.SetValue(Me, campo.GetValue(Objeto))
  41.             End If
  42.         Next
  43.     End Function

Ya tengo una clase de configuración a la que solo tengo que añadir nuevas variables en la declaración de la clase según precise, y no necesito añadir más código para guardar esa información.

Espero que os sirva.