Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

154
Vistas
Vincular o delegar una propiedad

Necesito una clase para modificar la propiedad de varias otras clases. Entonces, de alguna manera necesito delegar o vincular la propiedad a la clase de modificación. Esta es una maqueta de cómo se organizan las clases.

 MainClassA IHasAmount int Amount Price Goodstype MainClassB IHasAmount int Amount Quality Weight IHasAmount int Amount get; set; AmountModifierClass IHasAmount HasAmount

De esta manera, la cantidad se modificaría así:

 HasAmount.Amount -= AmountModifier();

Es solo un pequeño detalle que me molesta que el nombre se vuelva redundante. Me gustaría poder escribirlo solo como una propiedad o campo. Así que pruebo con esto:

UN)

 int Amount=> HasAmount.Amount

Pero eso no funciona porque se convierte en solo lectura. Así que asumo que no está apuntando también a la propiedad Cantidad original, sino que es un captador, sin un definidor. Así que intento lo siguiente:

B)

 int Amount { get { return HasAmount.Amount; } set { HasAmount.Amount = value; }}

¡Y esto funciona! Ahora puedo usar una propiedad privada de la clase AmountModifier que está vinculada a la propiedad Amount de MainClass, como Health = HealthModifer

Mi pregunta es si esta es una manera eficiente y no compleja de resolver esta situación. Supongo que lo que necesito es poder vincular una propiedad a otra en otra clase.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No hay forma de que una propiedad se delegue automáticamente a otra propiedad mediante funciones exclusivas del lenguaje C#.

La forma en que lo he logrado es creando un objeto detrás de cada propiedad, por lo que la propiedad termina luciendo más o menos así:

 int Amount { get => GetPropertyValue(); set => SetPropertyValue( value ); }

Los GetPropertyValue() y SetPropertyValue() reciben el nombre de la propiedad ("Cantidad") utilizando el atributo CallerMemberName . Internamente, buscan un objeto de propiedad por nombre en un diccionario que asigna nombres a objetos de propiedad y obtienen o establecen el valor de ese objeto de propiedad.

Entonces, la delegación se puede lograr de la siguiente manera:

 int AmountOfOtherObject { get => GetDelegatingPropertyValue( otherObject, nameof( otherObject.Amount ) ); set => SetDelegatingPropertyValue( otherObject, nameof( otherObject.Amount ), value ); }

Los GetDelegatingPropertyValue() y SetDelegatingPropertyValue() un tipo especial de propiedad en el mismo diccionario, que es una propiedad de delegación que delega a la propiedad correspondiente del "otro" objeto.

Termina siendo un poco más detallado de lo que desearía, y también requiere un soporte de infraestructura sustancial. Si intenta implementar esto, prepárese para una inmersión profunda en una larga madriguera de conejo.

over 4 years ago · Santiago Trujillo Denunciar

0

ver propiedades

 // This one indeed is a getter-only int Amount => HasAmount.Amount;

y

 int Amount { get => HasAmount.Amount; }

y

 int Amount { get { return HasAmount.Amount; } }

Son solo formas diferentes de escribir exactamente lo mismo.


Entonces, en su caso, su solución de trabajo

 int Amount { get { return HasAmount.Amount; } set { HasAmount.Amount = value; } }

también se puede escribir como

 int Amount { get => HasAmount.Amount; set => HasAmount.Amount = value; }

Entonces, si no desea exponer la referencia HasAmount esta es una forma totalmente válida de implementar dicha propiedad y no veo un problema con la eficiencia.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda