首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用静态或非静态类

问使用静态或非静态类
EN

Stack Overflow用户
提问于 2015-12-10 09:04:14
回答 1查看 82关注 0票数 3

我得到了一个静态类,但这是一个糟糕的选择吗?它应该是一个非静态类吗?

我想在班上设置两个值。

当您给出属性值时,在设置它们和获取它们时会有某种冲突的可能性吗?如果另一个用户有相同的目标。

我有一页叫这门课的。一个用户点击页面就会发生这种情况。

  1. 设置计算的属性
  2. 运行空值来计算两个属性
  3. “也许其他一些功能会运行,需要一些时间”
  4. 获取这两个属性的值

但是,如果另一个用户点击该页面并设置其他值并使第一个用户的值不正确怎么办。我想这是可能的?

我想过的其他选择是

  • 将所有属性作为参数发送到空中,并使用我需要的两个值返回一个新的类。(而不是将其存储为其他用户在使用之前可以更改的静态属性)。
  • 使用属性(可能称为BreakTime)创建一个新类。把它作为一个论点送进虚空。把它还回去,算一下。
  • 或者告诉我什么是最好的选择!:)

以下是它的外观:

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-10 09:07:58

永远不要创建静态状态,除非你真的,真的必须这样做,因为如果你真的这样做了,你就会为摔倒做好准备。您使测试变得更加困难,并且使线程冲突(如您所描述的)发生的可能性更高。

如果必须在类中设置状态,然后调用方法,而不只是将值作为参数传递给方法,则将其设置为非静态类。另外,最好通过构造函数传递值,而不是使用属性。

尽管如此,我对您的问题的方法是创建一个POCO来保存结果数据,并有一个静态的方法来进行计算。使用C# 6语法,如下所示:

代码语言:javascript
复制
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);
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34197568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档