Member 13462842 Ответов: 2

Как создать экземпляр класса obj в button1 и использовать метод obj в button2


private void button1_Click(object sender, EventArgs e)
        {
            Cat kitty = new Cat();
        }

        private void button2_Click(object sender, EventArgs e)
        {
           //kitty.eat();
        }


как получить доступ к kitty.eat() с помощью button2?
теперь Китти не является выходом в текущем контексте.


спасибо.

Что я уже пробовал:

private Cat button1_Click(object sender, EventArgs e)


или сделано EventArgs ?

2 Ответов

Рейтинг:
16

Karthik_Mahalingam

Объявите об этом Cat переменная за пределами event и сделайте его общим по всей странице

Cat kitty;  // declare outside
       private void button1_Click(object sender, EventArgs e)
       {
           kitty = new Cat();
       }

       private void button2_Click(object sender, EventArgs e)
       {
           if (kitty != null)  // validate for null value.
               kitty.eat();
       }


BillWoodruff

+5 мяу !

Karthik_Mahalingam

Спасибо Билл :)

Рейтинг:
10

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();
    }


BillWoodruff

+5 муррррррр