Как присвоить значение от статического метода C# до маркировки

У меня есть следующая статическая функция в 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 переменной для присваивания его маркировке, но когда я пробую компилятор, отказывается, это может быть сделано? Вокруг существует ли работа?

Спасибо.

5
задан Dan McGrath 5 February 2010 в 05:23
поделиться

4 ответа

Если по какой-то причине метод должен быть статическим, основным подходом здесь будет передача любого необходимого состояния в метод, т.е. добавление параметра к методу, который является либо меткой, либо (лучше) некоторая типизированная оболочка с настраиваемым свойством, например .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);
    }
}
4
ответ дан 14 December 2019 в 04:37
поделиться

Либо нестатично:

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
4
ответ дан 14 December 2019 в 04:37
поделиться

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

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-

Проблема заключается в попытке создать экземпляр переменной класса из статического метода.

0
ответ дан 14 December 2019 в 04:37
поделиться

Возможно, я упустил суть, но не могли бы вы просто сделать:

public static string Greet(string name)
{
    return string.Concat("Welcome ", name);
}

Тогда используйте это так:

string name = "John";
label1.Text = Greet(name);

Веб-методы не обязательно должны быть статическими.

0
ответ дан 14 December 2019 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: