OriginalGriff
Когда вы пишете такой код, вы не можете. Ваш код объявляет kitty
как локальная переменная - что означает, что она создается в стеке и присваивается новой переменной. cat
экземпляр из кучи. Когда button1_Click
метод обработчика событий завершается, переменная автоматически уничтожается, и больше нет ссылок на объект на основе кучи: kitty
идет вне сферы действия в конце метода.
Поскольку область действия любой переменной ограничена фигурными скобками, которые ее заключают (за исключением переменных уровня класса с соответствующими атрибутами: public
, protected
и т.д.) Они не могут быть доступны вне этого блока фигурных скобок:
{
int a = 1;
if (a == 1)
{
int b = 2;
} // b goes out of scope here
a = b; // Illegal: b is not in scope and is not available
} // a goes out of scope here
Чтобы "разделить" переменную между двумя обработчиками, переместите определение за пределы любого метода:
private Cat kitty = null;
private void button1_Click(object sender, EventArgs e)
{
kitty = new Cat();
}
private void button2_Click(object sender, EventArgs e)
{
kitty.eat();
}