请考虑此代码段
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的情况下。所以我的问题是在什么情况下我们会在类中定义一个非静态变量?
答案 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概念都不能很好地转化为静态变量。