Consulta sobre Contraseña

18/03/2005 - 09:30 por Pedro Rivera | Informe spam
La situación es la siguiente: Estoy desarrollando un
conjunto de clases que se transmitirán información entre
sí. Actualmente he declarado estas clase como no
heredables, aunque la verdad yo quisiera implementarlas
como interfaces o como clases heredables.

La razón de hacerlas no heredables es que casi todas las
propiedades de las clases serán de solo lectura, solo una
de lectura-escritura, y tendrán un método que se podrá
usar solo una vez al crearlas. Después de creadas, ya no
podrá volverse a utilizar este método, que es el que les
pasará la información a las propiedades de la clase.

Después de creadas la clases (al decir creadas me refiero
a instanciarlas y hacer el archivo con su extensión), una
de ellas, "Clase2", debe escribir en la propiedad de
lectura-escritura de las otras clases ("Clase3"
y "Clase4"), pero SOLO ESTA CLASE puede escribir en esa
propiedad, es decir, no quiero que haya forma de escribir
en esa propiedad de las otras clases más que a través
de "Clase2". Por ejemplo, si yo declaro una nueva
instancia de "Clase2" y hago:

Dim Cl2 as new Clase2
Cl2.PropiedadLectEscr=Objeto

la propiedad no cambia. Para lograr esto, he declarado la
propiedad de forma tal, que para poder escribir el valor,
se le deba pasar un parámetro a la propiedad (como con la
propiedad item de un arrayList). Este parámetro es una
cadena que solo la "Clase2" conoce, y por lo tanto
solo "Clase2" puede acceder al método Set de la propiedad
(la función Get no ocupa el parámetro).

Después de este rollo (posiblemente innecesario, solo que
traté de clarificarlo) mi pregunta es: ¿Es posible que
alguien de alguna manera: a) Logre extraer ese parámetro
b) acceder al método Set de la propiedad?

Si la respuesta es que no se puede, ¿de qué otra forma
puedo lograr esta misma seguridad trabajando con
Interfaces o con una clase heredable?

Saludos a todos y Gracias.
 

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
18/03/2005 - 13:52 | Informe spam
Si no entendi mal, lo que buscas se resuelve con un constructor con
parametros y propiedades de solo lectura. Ejemplo:

Class MiClase

Private _propiedad As String

Public Sub New(propiedad As String)
_propiedad = propiedad
End Sub

Public ReadOnly Property MiPropiedad As String
Get
Return _propiedad
End Get
End Property

End Class

Siendo asi, solo al crear la instancia puedes asignarle un valor a la
propiedad: Dim obj As New MiClase("El Valor")

Si las instancias de esta clase solo las puede crear otra clase del mismo
proyecto entonces cambia el constructor de Public a Friend.

De todas formas usando Reflection es posible acceder al campo "_propiedad"
pese a ser privado y modificar su valor, pero hacer eso requiere de mas
trabajo.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C

Preguntas similares