繁体   English   中英

C# 如何使用可选值将属性传递给基础 class?

[英]C# How to pass properties to base class with optional values?

在下面的代码示例中,如果客户端未设置 HighValue 和 LowValue 属性,我如何将这些属性的默认值传递给基本 class?

如果此示例设置中存在设计错误,我要提前感谢您警告我。


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;
    }
}

您的酒吧 class 中有一个错误,因为它没有默认构造函数,您将永远无法创建 object,因为它将永远是一个递归 - 每个新实例都需要另一个,依此类推

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 Bar(int scaleHigh=0, int scaleLow=0, int highValue=0, int lowValue=0)
        : base(scaleHigh, scaleLow)
    {
        HighValue = SomeHelper.ReCalculate(highValue);
        LowValue = SomeHelper.ReCalculate(lowValue);
    }

对不起,如果我误解了,但我相信你想设置 Bar 的默认值,如果它们没有设置? 在什么情况下构造函数不会设置值?

如果您没有在构造函数中设置它们,您可以考虑的一件事是将类型设置为int? 然后像这样设置变量:

public int? HighValue => HighValue?? (defaultValue)

尝试这个:

public int LowValue { get; } = 0; //You can change these values.
public int HighValue { get; } = 10;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM