Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

156
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!