En el siguiente ejemplo de código, si el cliente no establece las propiedades HighValue y LowValue, ¿cómo puedo pasar los valores predeterminados de estas propiedades a la clase base?
Si hay un error de diseño en esta configuración de ejemplo, me gustaría agradecerle de antemano por advertirme.
public class Foo { public Foo(int scaleHigh, int scaleLow) { ScaleHigh = scaleHigh; ScaleLow = scaleLow; } public int ScaleHigh { get; } public int ScaleLow { get; } } public class Bar : Foo { public Bar(Bar bar) : base(bar.ScaleHigh, bar.ScaleLow) { HighValue = SomeHelper.ReCalculate(bar.HighValue); LowValue = SomeHelper.ReCalculate(bar.LowValue); } public int HighValue { get; } public int LowValue { get; } } public class SomeHelper { public static int ReCalculate(int scale) { return scale * 5; } } public class Client : Bar { public Client(Bar bar) : base(bar) { } public int Request(bool condition) { return condition ? HighValue : LowValue; } }Prueba esto:
public int LowValue { get; } = 0; //You can change these values. public int HighValue { get; } = 10;tiene un error en su clase de barra, ya que no tiene un constructor predeterminado, nunca podrá crear el objeto, ya que será una recursión para siempre: cada nueva instancia necesitará otra y así sucesivamente
public class Bar : Foo { public Bar(Bar bar) : base(bar.ScaleHigh, bar.ScaleLow) { HighValue = SomeHelper.ReCalculate(bar.HighValue); LowValue = SomeHelper.ReCalculate(bar.LowValue); } public int HighValue { get; } public int LowValue { get; } }puedes arreglarlo agregando otro constructor como este
public Bar(int scaleHigh=0, int scaleLow=0, int highValue=0, int lowValue=0) : base(scaleHigh, scaleLow) { HighValue = SomeHelper.ReCalculate(highValue); LowValue = SomeHelper.ReCalculate(lowValue); }Lo siento si no entendí bien, pero creo que desea establecer valores predeterminados de Bar si no están configurados. ¿En qué caso el constructor no establecería los valores?
En el caso de que no los haya configurado en su constructor, una cosa que puede considerar es hacer que los tipos sean int? y luego establecer la variable de esta manera:
public int? HighValue => HighValue ?? (defaultValue)