[英]Use a static or a non static class
我得到了一個靜態的課程,但這是一個不好的選擇嗎? 它應該是非靜態類嗎?
我想在班上設置兩個值。
有沒有機會在給出屬性值時設置它們和獲取它們時會出現某種沖突? 如果其他用戶具有相同的目標。
我有一個叫這個班級的頁面。 一個用戶點擊該頁面就會發生這種情況。
但是,如果另一個用戶點擊頁面並設置其他值並使第一個用戶的值不正確,該怎么辦呢? 我想這可能嗎?
我想到的其他一些選擇也是
在這里看起來如何:
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.