Как создать глобальный или публичный объект из метода?C # - PullRequest
1 голос
/ 14 марта 2019

Я изучаю это уже больше недели, и я в замешательстве.

Я работаю с несколькими формами в Windows.Каждая форма находится в своем собственном пространстве имен.В следующем коде я создаю новую форму класса Robo_Pass.Он находится в пространстве имен Space_Pass.Форма, в которой я работаю, является классом Overseer и находится в пространстве имен Robo_Pi.

Обратите внимание, что использование нескольких пространств имен не является проблемой.Это очень хорошо работает.

В этой программе я находился с:

using Space_Pass;(Я делаю это, чтобы получить доступ к Robo_Pass без необходимости указывать пространство имен, в котором оно находится.

Вот мой код:

        public void Btn_Robo_Pass_Click(object sender, EventArgs e)
        {
            // Check to see if this Namespace/Form is open.
            bool test = check_App_Open("Robo_Pass"); 
            if (test == false) // if not, then create it. 
            {
                Robo_Pass pass = new  Robo_Pass();
                // set up event handler for when this form closes
                pass.FormClosed += Btn_Apps_Click;
                pass.TopMost=true;      
                pass.Show();        
                btn_Apps_.PerformClick();
            }
            else // If already open, then just call Window_Show(). 
            {
                Window_Show("Robo_Pass");
                btn_Apps_.PerformClick();               
            }   
        }

Единственная рассматриваемая строка:

                Robo_Pass pass = new  Robo_Pass();

Могу ли я что-нибудь добавить в эту строку, чтобы сделать этот объект с именем «pass» глобальным для остальной части программы.

Другими словами, из других методов этого класса я хочу бытьвозможность вызывать методы в другой форме следующим образом:

pass.method(variable);

Я действительно могу сделать это, если я создаю объект «pass» вне метода. Другими словами, если я перемещаю следующий код за пределылюбые методы, с которыми он работает:

                Robo_Pass pass = new  Robo_Pass();

Затем я могу получить доступ к методам внутри него, используя

pass.method(variable);

Но мне нужно создать этот объект в методе нажатия кнопки, показанном первоначально.

Так что мой вопрос таков.

Есть ли способ, которым я могу создать этот объект в этом методе кнопки и сделать объект доступным в других методах.

Я попытался добавить ключевые слова, такие как staticПубличный, глобальный. Номоя IDE отвергает все это в этом контексте.

Поэтому я не знаю, как сделать этот объект с именем «pass» доступным для других методов этого класса.

Как я уже сказал, это работает как обаяние, если я создаю его экземпляр вне метода.Но не могу этого сделать.Мне нужно иметь возможность создать его экземпляр с помощью кнопки.

Примечание. Я прошу прощения за неправильное форматирование или опечатки в этом посте.Я не часто пишу здесь, но я действительно озадачен этим.Надеюсь, это легко исправить.Я просто не знаю, как это сделать.

1 Ответ

0 голосов
/ 14 марта 2019

Переместите объявление переменной за пределы вашего метода и сделайте его общедоступным, а затем создайте его экземпляр в вашем методе:

public Robo_Pass pass = null;

public void Btn_Robo_Pass_Click(object sender, EventArgs e)
{
  ...
  pass = new  Robo_Pass();
  ... 
}

Теперь вы можете получить к нему доступ через экземпляр вашего класса:

var yourClass = new YourClass();
yourClass.pass.method(variable);

Если вы хотите, чтобы он был доступен даже без создания объекта вашего класса, сделайте его статическим:

public static Robo_Pass pass = null;

Тогда вы можете получить его, просто вызвав YourClass.pass.method(variable).Просто не забудьте сначала убедиться в том, что он был инициализирован, или проверьте, не истекло ли оно.

...