Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

150
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda