В чем разница между переменной-членом и локальной переменной?
Являются ли они одинаковыми?
В чем разница между переменной-членом и локальной переменной?
Являются ли они одинаковыми?
Членная переменная является членом типа и относится к этому типу. Локальная переменная не является членом типа и представляет собой локальное хранилище, а не состояние экземпляра заданного типа.
Тем не менее, все это очень абстрактно. Вот пример С#: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;
}
Локальная переменная - это переменная, которую вы объявляете в функции.
Членная переменная - это переменная, которую вы объявляете в определении класса.
Существует два типа переменной-члена: экземпляр и static.
Переменная экземпляра сохраняется до экземпляра класса. Для каждого экземпляра будет одна копия.
Статическая переменная сохраняется до тех пор, пока класс. Существует один экземпляр для всего класса.
Локальная переменная объявляется в методе и продолжается до тех пор, пока метод не вернется:
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 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
}
}
Членная переменная принадлежит объекту... что-то, что имеет состояние. Локальная переменная просто принадлежит таблице символов любой области, в которой вы находитесь. Однако они будут представлены в памяти так же, как у компьютера нет понятия класса... он просто видит биты, которые представляют инструкции. Локальные переменные и переменные-члены могут быть как в стеке, так и в куче.