簡體   English   中英

使用靜態或非靜態類

[英]Use a static or a non static class

我得到了一個靜態的課程,但這是一個不好的選擇嗎? 它應該是非靜態類嗎?

我想在班上設置兩個值。

有沒有機會在給出屬性值時設置它們和獲取它們時會出現某種沖突? 如果其他用戶具有相同的目標。

我有一個叫這個班級的頁面。 一個用戶點擊該頁面就會發生這種情況。

  1. 設置計算的屬性
  2. 運行void以計算兩個屬性
  3. “也許其他一些功能運行並需要一些時間”
  4. 獲取兩個屬性的值

但是,如果另一個用戶點擊頁面並設置其他值並使第一個用戶的值不正確,該怎么辦呢? 我想這可能嗎?

我想到的其他一些選擇也是

  • 將所有屬性作為參數發送到void中,並返回一個包含我需要的兩個值的新類。 (不要將它們存儲為靜態屬性,在使用之前可以由其他用戶更改)。
  • 使用屬性創建一個新類(可能稱為BreakTime)。 將其作為一個參數發送到void中。 退貨,計算。
  • 或者你告訴我最好的選擇是什么! :)

在這里看起來如何:

public static class BreakTimeCalculator
{
    public static int BreakFromSec { get; private set; }
    public static int BreakUntilSec { get; private set; }
    public static int CustomBreakSec { get; set; }
    public static int FromSec { get; set; }
    public static int UntilSec { get; set; }
    public static int Equlizer { get; set; }

    public static void CalculateBreakFromAndBreakeUntil()
    {
        var taskLength = UntilSec - FromSec;
        var middleOfTask = FromSec + (taskLength / 2);
        var secondsToMoveLeft = middleOfTask % 300;
        var amountEqualizers = CustomBreakSec / Equlizer;
        var fiftyFifty = amountEqualizers % 2 == 0;
        var leftSideEqualizers = fiftyFifty ? amountEqualizers / 2 : (amountEqualizers / 2) + 1;

        BreakFromSec = middleOfTask - secondsToMoveLeft - (leftSideEqualizers * Equlizer);
        BreakUntilSec = BreakFromSec + CustomBreakSec;
    }
}

永遠不要創造靜態,除非你真的,真的必須如果你這樣做,你將為自己做好准備。 你使測試更難,你使線程沖突的可能性(正如你所描述的)發生得更高。

如果必須在類中設置狀態然后調用方法,而不是僅將值作為參數傳遞給方法,請將其設置為非靜態類。 此外,您最好通過構造函數傳遞值,而不是使用屬性。

話雖如此,我對您的問題的處理方法是創建一個POCO來保存結果數據並使用靜態方法進行計算。 使用C#6語法,這將看起來像:

public class BreakTimeResult
{
    public BreakTimeResult(int breakFromSec, int breakUntilSec)
    {
        BreakFromSec = breakFromSec;
        BreakUntilSec = breakUntilSec;
    }

    public int BreakFromSec { get; }
    public int BreakUntilSec { get; }
}


public static class BreakTimeCalculator
{
    public static BreakTimeResult CalculateBreakFromAndBreakeUntil(int customBreakSec,
                                                                   int fromSec,
                                                                   int untilSec,
                                                                   int equlizer)
    {
        var taskLength = untilSec - fromSec;
        var middleOfTask = fromSec + (taskLength / 2);
        var secondsToMoveLeft = middleOfTask % 300;
        var amountEqualizers = customBreakSec / equlizer;
        var fiftyFifty = amountEqualizers % 2 == 0;
        var leftSideEqualizers = fiftyFifty 
            ? amountEqualizers / 2 
            : (amountEqualizers / 2) + 1;

        var breakFromSec = middleOfTask - secondsToMoveLeft - (leftSideEqualizers * equlizer);
        var breakUntilSec = breakFromSec + customBreakSec;
        return new BreakTimeResult(breakFromSec, breakUntilSec);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM