Если метод по какой-то причине должен быть статическим, основной подход здесь заключается в том, чтобы передать любое требуемое состояние в метод - т.е. добавить в метод параметр, который является либо меткой, либо (лучше) некоторая типизированная оболочка с настраиваемым свойством, например .Greeting
:
public static string Greet(string name, YourType whatever)
{
string greeting = "welcome ";
whatever.Greeting = string.Concat(greeting, name);
return name;
}
(где YourType
может быть вашим элементом управления или интерфейсом, позволяющим повторное использование)
То, что вы не хотите сделать, - это использовать статическое состояние или события - очень легко получить утечки памяти и т. Д. Таким образом.
Например:
public static string Greet(string name, IGreetable whatever)
{
string greeting = "welcome ";
whatever.Greeting = string.Concat(greeting, name);
return name;
}
public interface IGreetable {
string Greeting {get;set;}
}
public class MyForm : Form, IGreetable {
// snip some designer code
public string Greeting {
get { return helloLabel.Text;}
set { helloLabel.Text = value;}
}
public void SayHello() {
Greet("Fred", this);
}
}