Как проверить «группу методов» через объект «отправитель»? - PullRequest
0 голосов
/ 19 апреля 2011

Представьте себе метод, подобный этому (в Win Forms):

//First method
private void buttonStart_Click(object sender, EventArgs e)
{
       //I call another method here
       this.GetData(sender, null)
}

//Second method
private void GetData(object sender, EventArgs e)
{
       //how to check IF calling method is buttonStart_Click ???
       if(sender.Equals == buttonStart_Click) 
       {
            //DO BLAH BLAH
       }
}

Надеюсь, мне было ясно, то есть я хочу знать, какой метод вызывает 'GetData'. note Я знаю, что могу иметь глобальную переменную и установить ее на что-то, но я хочу знать, есть ли ПРЯМОЙ способ сделать это?

Спасибо.

Ответы [ 3 ]

1 голос
/ 19 апреля 2011

sender не будет buttonStart_Click, это будет просто кнопка.Таким образом, вы можете проверить это.

if (sender != null && sender.Equals(buttonStart))
{
   // work with this information
}

Однако, если вы поймете, что идете по этому маршруту, вы можете в конечном итоге увидеть несколько блоков if каждый с различным поведением в зависимости от идентичности sender.Если это так, вам лучше обойтись другим подходом.Иметь разные обработчики для каждого события, инкапсулировать различную логику через делегата и т. Д. Не заканчивайте страницу, заполненную if / else if / else if / ....

0 голосов
/ 19 апреля 2011

Не уверен, почему ты так поступаешь, но если тебе нужно ... http://www.csharp411.com/c-get-calling-method/

0 голосов
/ 19 апреля 2011

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

//First method
private void buttonStart_Click(object sender, EventArgs e)
{
       //I call another method here
       this.SpecialGetData(sender, null)
}

//Second method
private void GetData(object sender, EventArgs e)
{
     // Do regular stuff
}

//Special second method
private void SpecialGetData(object sender, EventArgs e)
{
    //DO BLAH BLAH
}
...