如何将C#静态方法的值赋给标签

时间:2010-02-05 04:50:51

标签: c# asp.net static methods

我在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变量的值以将其作为标签,但是当我尝试编译器拒绝,可以这样做吗?有工作吗?

谢谢。

4 个答案:

答案 0 :(得分:4)

非静态:

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

答案 1 :(得分: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);
    }
}

答案 2 :(得分:0)

问题是您尝试从静态方法实例化一个类变量。

答案 3 :(得分:0)

也许我错过了这一点,但你不能这样做:

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

然后使用它:

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

Web方法不必是静态的。