Clases y tipos definidos por el usuario

26/02/2005 - 14:23 por LSRI | Informe spam
Estoy creando una clase y el problema viene cuando las propiedades son de un
tipo definido por el usuario (propio).
Estos tipos los defino con STRUCTURE.
Como definio un tipo q solo tenga un campo. Por ejemplo, definir el tipo de
dato con nombre MEMORIA y q sea un array de 50 elemento de tipo DOUBLE.

En el caso de propiedades q contengan otras (propiedad1.proiedad2), como se
escribe la propiedad (PROPERTY)?
Si escribo, por ejemplo, link.ant = 4. Me indica w link.ant es un valor y no
se le puede asignar.

Este es el codigo de la clase:

Public Class Lista
'tipos de datos propios
Structure tEnlace
Public sig As Int16
Public ant As Int16
End Structure
Structure tValor
Public tipo As String
End Structure
'
'variables privadas
Private _elemento As tValor
Private _link As tEnlace
Private _eliminado As Boolean
'
'propiedades publicas
Public Property Elemento() As tValor
Get
Return _elemento
End Get
Set(ByVal Value As tValor)
_elemento = Value
End Set
End Property
Public Property Link() As tEnlace
Get
Return _link
End Get
Set(ByVal Value As tEnlace)
_link.ant = Value.ant
_link.sig = Value.sig
End Set
End Property
'
End Class

Me vasta con q me inkes donde encontrar informacion al respecto.
GRACIAS.

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
26/02/2005 - 15:07 | Informe spam
Como definio un tipo q solo tenga un campo. Por ejemplo, definir el
tipo de dato con nombre MEMORIA y q sea un array de 50 elemento de
tipo DOUBLE.



¿Te refieres a hacer algo como un typedef de C? Si es eso entonces la
respuesta es que no hay forma. Tampoco puedes definir un array de tamaño
fijo en una estructura.

En el caso de propiedades q contengan otras (propiedad1.proiedad2),
como se escribe la propiedad (PROPERTY)?
Si escribo, por ejemplo, link.ant = 4. Me indica w link.ant es un
valor y no se le puede asignar.



El problema viene porque estas usando una estructura. Las estructuras son
tipos de valor y por lo tanto al pasarlas entre metodos lo que se hace es
copiarlas. Como la propiedad Link devuelve una copia no tiene sentido
cambiar uno de los miembros ya que no estas modificando la estructura que
esta dentro de la clase. La solucion es usar una clase en lugar de una
estructura.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Hay dos cosas infinitas: el universo y la estupidez humana.
Albert Einstein
Respuesta Responder a este mensaje
#2 LSRI
26/02/2005 - 18:21 | Informe spam
Gracias Eduardo.
Lo q intento es implementar las estrucuras de punteros con array para
trabajar con una lista.
De esta forma tendria una array en el cual cada elemento seria de tipo
cNodoLista.
cNodoLista es la clase q contiene las propiedades del nodo y todos sus
metodos (añadir nuevo nodo, eliminar nodo, leer nodo,...).
Es mejor q lo haga como un modulo?

"Eduardo A. Morcillo [MS MVP VB]" wrote:

> Como definio un tipo q solo tenga un campo. Por ejemplo, definir el
> tipo de dato con nombre MEMORIA y q sea un array de 50 elemento de
> tipo DOUBLE.

¿Te refieres a hacer algo como un typedef de C? Si es eso entonces la
respuesta es que no hay forma. Tampoco puedes definir un array de tamaño
fijo en una estructura.

> En el caso de propiedades q contengan otras (propiedad1.proiedad2),
> como se escribe la propiedad (PROPERTY)?
> Si escribo, por ejemplo, link.ant = 4. Me indica w link.ant es un
> valor y no se le puede asignar.

El problema viene porque estas usando una estructura. Las estructuras son
tipos de valor y por lo tanto al pasarlas entre metodos lo que se hace es
copiarlas. Como la propiedad Link devuelve una copia no tiene sentido
cambiar uno de los miembros ya que no estas modificando la estructura que
esta dentro de la clase. La solucion es usar una clase en lugar de una
estructura.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Hay dos cosas infinitas: el universo y la estupidez humana.
Albert Einstein



Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
27/02/2005 - 01:17 | Informe spam
Lo q intento es implementar las estrucuras de punteros con array para
trabajar con una lista.



¿Una lista ligada? Si es una lista ligada a falta de punteros se usan las
clases ya que estas son un tipo por referencia y lo que entonces estarias
usando serian referencias a las instancias, que de alguna forma equivalen a
un puntero. Como ejercicio esta bien hacerlo pero fijate si en el namespace
System.Collections no hay algun tipo de coleccion que se adapte a lo que
quieres hacer y si encuentras una muy cercana puedes usarla como base para
tu propia coleccion.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Inteligencia militar son dos términos contradictorios.
Groucho Marx
Respuesta Responder a este mensaje
#4 LSRI
03/03/2005 - 20:49 | Informe spam
Gracias Eduardo.

En System.Collection encontre unas clases para trabajar con listas, pilas y
colas.
Solo tengo una duda:
Con la clase q yo implente (la tengo operativa :-) ), al añadir un nodo a la
lista no se mueven todos los elementos a la izquierda para insertar el nuevo,
sino q se añade al final del vector (o array) y su propiedad enlace (enlace
siguiente) apunta (contiene la posicion de) al elemento siguiente. Igual q se
haria con punteros en C.
La clase ArrayList de System.Collection hace lo mismo q yo? Si hay q mover
1000 elementos supongo q es mejor mi metodo, no? (ArrayList especifica que
los elementos se desplazan hacia la derecha) (Derecha o izq da lo mismo)

Teoria es cuando se sabe todo y nada funciona;
Practica, cuando todo funciona y nadie sabe porq.
Respuesta Responder a este mensaje
#5 Eduardo A. Morcillo [MS MVP VB]
04/03/2005 - 00:29 | Informe spam
ArrayList no es una lista ligada. Simplemente es una clase que encapsula un
array que de ser necesario se redimensiona para agregar nuevos items
(redimensionar un array implica crear uno nuevo con el nuevo tamaño y copiar
los elementos del anterior al nuevo). Hasta donde yo se, no hay ninguna
clase en System.Collections que este implementada como lista ligada.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo

Nadie puede amasar una fortuna sin hacer harina a los demás.
Manolito
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida