簡體   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