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