成员变量和局部变量有什么区别?
它们一样吗?
局部变量是您在函数中声明的变量。
成员变量是您在类定义中声明的变量。
成员变量是类型的成员,属于该类型的状态。局部变量不是类型的成员,代表本地存储而不是给定类型实例的状态。
然而,这一切都非常抽象。这是一个 C# 示例:
class Program
{
static void Main()
{
// This is a local variable. Its lifespan
// is determined by lexical scope.
Foo foo;
}
}
class Foo
{
// This is a member variable - a new instance
// of this variable will be created for each
// new instance of Foo. The lifespan of this
// variable is equal to the lifespan of "this"
// instance of Foo.
int bar;
}
成员变量有两种:实例和静态。
实例变量的持续时间与类的实例一样长。每个实例将有一份副本。
静态变量的持续时间与类一样长。全班只有一份。
在方法中声明的局部变量只持续到方法返回:
public class Example {
private int _instanceVariable = 1;
private static int _staticvariable = 2;
public void Method() {
int localVariable = 3;
}
}
// Somewhere else
Example e = new Example();
// e._instanceVariable will be 1
// e._staticVariable will be 2
// localVariable does not exist
e.Method(); // While executing, localVariable exists
// Afterwards, it's gone
public class Foo
{
private int _FooInt; // I am a member variable
public void Bar()
{
int barInt; // I am a local variable
//Bar() can see barInt and _FooInt
}
public void Baz()
{
//Baz() can only see _FooInt
}
}
局部变量是您在函数中声明的变量。它的生命周期仅在该函数上。
成员变量是您在类定义中声明的变量。它的生命周期仅在该类内。它是全局变量。它可以被同一类内的任何函数访问。
成员变量属于一个对象……有状态的东西。局部变量只属于您所在范围的符号表。但是,它们将在内存中表示,就像计算机没有类的概念一样……它只看到表示指令的位。局部变量和成员变量都可以在栈上或堆上。