类变量Vs静态变量

时间:2014-05-27 16:53:55

标签: c#

请考虑此代码段

 public partial class Default : System.Web.UI.Page
 {
     string variable1;
     static string variable2;

     protected void Page_Load(object sender, EventArgs e)
     {
      foo(); 
     }

     protected void foo()
     {
      // Can access variable1 and variable2
     }
 }

几个问题:

a)我知道变量2被称为类变量,因为它被定义为静态。但是什么样的变量是变量1?

b)我理解在方法中分配给variable2的值表示foo()将在此类中定义的所有方法中保持不变。但它不会在变量1的情况下。所以我的问题是在什么情况下我们会在类中定义一个非静态变量?

4 个答案:

答案 0 :(得分:1)

嗯,variable1是一个实例变量。下面是一个简单的例子。请记住它的不好的做法来做到这一点,但只是为了说明这一点:

public class Person
{
    public static string Species { get; set; }

    public string Name { get; set; }

    public string GetSpecies()
    {
        return Species;
    }
}

考虑使用......我们可以有2个单独的Person个对象,每个对象都有一个唯一的名称,但它们共享相同的物种,因为它是静态的":

Person.Species = "Homo Sapien";

Person alice = new Person();
aline.Name = "Alice";

Person bob = new Person();
bob.Name = "Bob";

Console.WriteLine(alice.Name);
Console.WriteLine(alice.GetSpecies());
// Alice
// Homo Sapien

Console.WriteLine(bob.Name);
Console.WriteLine(bob.GetSpecies());
// Bob
// Homo Sapien

如果我们要更改Person.Species = "Dog",那么鲍勃和爱丽丝都会有#34;狗"作为他们的物种,但他们的名字仍然是" Bob"和#34; Alice"。

答案 1 :(得分:0)

我认为静态变量variable2是遍历所有类的实例,而variable1只能由单个类实例访问。换句话说,静态变量与所有实例共享。

答案 2 :(得分:0)

静态字段在同一个类的所有实例之间共享,这些实例在Web环境中包含多个用户的多个线程,因此不应使用。静态方法在Web环境中很好,只要它们避免静态字段。

答案 3 :(得分:0)

大多数时候你想避免使用静态变量和方法。静态变量可以在类的所有实例中访问,并且与" regular"相反。只能使用当前实例访问的变量。使用静态变量时需要非常小心,因为不同的实例可能同时访问它们。此外,大多数OO概念都不能很好地转化为静态变量。