У меня есть следующая статическая функция в c#
public static string Greet(string name)
{
string greeting = "welcome ";
// is it possible to pass this value to a label outside this static method?
string concat = string.Concat(greeting, name);
//error
Label1.text = concat;
//I want to return only the name
return name;
}
Как Вы видите в комментариях, я хочу сохранить только имя как возвращаемое значение, однако я хочу смочь вынуть значение concat переменной для присваивания его маркировке, но когда я пробую компилятор, отказывается, это может быть сделано? Вокруг существует ли работа?
Спасибо.
Если по какой-то причине метод должен быть статическим, основным подходом здесь будет передача любого необходимого состояния в метод, т.е. добавление параметра к методу, который является либо меткой, либо (лучше) некоторая типизированная оболочка с настраиваемым свойством, например .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);
}
}
Либо нестатично:
public string Greet(string name)
{
const string greeting = "welcome ";
string concat = string.Concat(greeting, name);
Label1.Text = concat;
return name;
}
, либо все еще статично, передается метка вроде Greet ("John", Label1)
:
public static string Greet(string name, Label label)
{
const string greeting = "welcome ";
string concat = string.Concat(greeting, name);
label.Text = concat;
return name;
}
Но не уверен, почему вам нужно возвращать имя в любом случае ... если оно было у вас при вызове функции, оно уже есть в той области видимости, в которую вы вернетесь. Пример:
var name = "John";
Greet(name);
//can still call name here directly
Если метод должен быть статическим по какой-либо причине, основным подходом здесь будет передача любого требуемого состояния в метод, т.е. добавление параметра к методу, который является либо меткой, либо (лучше) некоторой типизированной оберткой с настраиваемым свойством, таким как .Гретинг
:
public static string Greet(string name, YourType whatever)
{
string greeting = "welcome ";
whatever.Greeting = string.Concat(greeting, name);
return name;
}
(где YureType
может быть вашим контролем или может быть интерфейсом, позволяющим повторно использовать)
Что вы не хотите делать, так это использовать статическое состояние или события - очень легко получить утечки памяти и т.д., что путь.
Например:
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);
}
}
-121--4859565- Поскольку H2 не предоставляет плагин Maven, его следует запустить с помощью maven-antrun-плагина. Напишите код для запуска и остановки механизма h2 в задаче ant и вызовите его при запуске и остановке интеграционного теста.
См. подробные сведения о http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing
-121--1261678-Проблема заключается в попытке создать экземпляр переменной класса из статического метода.
Возможно, я упустил суть, но не могли бы вы просто сделать:
public static string Greet(string name)
{
return string.Concat("Welcome ", name);
}
Тогда используйте это так:
string name = "John";
label1.Text = Greet(name);
Веб-методы не обязательно должны быть статическими.