改变静态变量的值是不好的做法吗?

时间:2011-02-15 15:49:24

标签: c# static simple-form

我有一个静态字符串变量,我需要根据HTTP协议进行更改。

更改静态字符串变量>

是不好的做法
static string QuoteWebServiceUrl = CommonFunctions.ReadAppSetting("QuoteWebServiceUrl");

if(url == "https")
{
  QuoteWebServiceUrl = CommonFunctions.ReadAppSetting("QuoteWebServiceUrlSecure");
}
else
{
  QuoteWebServiceUrl = CommonFunctions.ReadAppSetting("QuoteWebServiceUrl");
}

由于

8 个答案:

答案 0 :(得分:10)

没有。当然,您可以更改静态字符串变量的值。为什么你认为这是一个糟糕的实践?

答案 1 :(得分:1)

我的意思是,修改静态变量不是问题。这是一个变量。它可以变化。那么为什么变化(即修改它)是一种不好的做法呢?是的,在某些情况下,如果你这样做,你不应该或不必小心,但总的来说,事实并非如此。

这里最大的问题是在应用程序的内容深处阅读应用程序设置。它会破坏可维护性和可测试性。这是一种非常糟糕的做法,我鼓励你立即停止。

答案 2 :(得分:1)

在这种情况下,它看起来只是一次性设置,但您必须注意多线程环境中的竞争条件,包括ASP.NET。

答案 3 :(得分:0)

从编程方面来说,从POV语言可以改变它。

否则取决于变量的逻辑,它在整个业务逻辑中的含义。

答案 4 :(得分:0)

不,这在一般中并不是一个坏习惯。在特定的情况下,这是一个可怕的主意。

答案 5 :(得分:0)

单独更改静态变量并不是一件坏事。

但是,我看不到有关此类的多个实例修改相同静态的预防措施。这是一个潜在的并发问题。

此外,你应该在静力学中设置两个设置,并根据你的情况选择一个合适的设置,但在初始化后保留静态。

答案 6 :(得分:0)

对于多线程,编辑静态变量不好,不能扩展,并且可能在某些随机情况下不适当地运行。 但是...

在某些业务逻辑中,一次只能处理一个线程,或者限制为一个线程。如果是这种情况,完全可以使用

在这种情况下,最好有一个选择,我们有时可能没有别的选择,而是进行更改(其中一种情况是将WEBAPI与Async任务一起使用,最重要的是一次仅一个线程,并且用户希望为每个线程动态更新状态) api点击)

答案 7 :(得分:-1)

您可以使用静态属性而不是静态变量。


private static string QuoteWebServiceUrl 
{ 
    get 
    { 
        if(url == "https") 
        {   
            return CommonFunctions.ReadAppSetting("QuoteWebServiceUrlSecure"); 
        } 
        else 
        {   
            return CommonFunctions.ReadAppSetting("QuoteWebServiceUrl"); 
        } 
    } 
}

Static Property