在C#中使用静态变量会妨碍安全编码实践吗?

时间:2016-02-10 16:40:27

标签: c# static secure-coding

我是C#编程的新手,我目前在代码中使用了很多静态变量。以下是一个例子:

class Program
{
    public int I//Can be used to access the variable i anywhere from the code as it is public
    {
        get { return i; }
        set { i = value; }
    }

    static int i = 0; // A private static integer
    static void Main(string[] args)
    {
        i = 1;// The main function is changing this integer
    }

    void reset() { 
        i = 0;// another function is changing the value of integer i
    }
}

class otherclass 
{
    void otherreset()
    {
        Program program = new Program();
        program.I = 1;// another function in another class is changing the value of integer i(indirectly)   

    }

}
  1. 静态变量 i 可用于该类中的所有函数。
  2. 然后与代码中的每个函数共享 i ,因为它是公开的。 - 不确定我是否应该这样做。
  3. 我确实找到了这个关于using static variables in C#的帖子,但我想知道,从安全角度来看这是一个标准做法。我担心在整个程序执行过程中变量驻留在内存中的相同位置。

    在各种功能之间共享变量是否还有其他更好的方法。

1 个答案:

答案 0 :(得分:2)

static int i = 0; // A private static integer

这里你声明了一个静态成员。到目前为止一切都很好。

static void Main(string[] args)
{
    int i = 1;// The main function is changing this integer
}

不,它没有。 int i表示您声明了一个名为i new 局部变量。

void reset() { 
    int i = 0;// another function is changing the value of integer i
}

不,它没有。 int i表示您声明了一个名为i new 局部变量。

  

从安全角度来看,我想知道这是否是标准做法。

不,它不是,也不是,它与安全无关。您应该避免尽可能使用静态成员。我认为为什么的实际原因目前与您目前的知识和理解水平相差太远。只需将其作为最佳实践。

  

我担心在整个程序执行过程中变量驻留在内存中的相同位置。

好吧,一个在内存位置之间“传播”的变量不是一个好主意:-)变量非常简单地放在内存中命名的位置。

  

通常还有其他更好的方法可以在各种函数之间共享变量。

是的,首先要了解功能参数,成员字段和属性。使用您可用的任何初学C#书,或在线搜索。