如何将C#静态方法中的值指定给标签
我在c中有以下静态函数# 正如您在注释中看到的,我只希望保留名称作为返回值,但是我希望能够取出concat变量的值以将其分配给标签,但是当我尝试编译器拒绝时,可以这样做吗?附近有工作吗 谢谢。非静态:如何将C#静态方法中的值指定给标签,c#,asp.net,static,methods,C#,Asp.net,Static,Methods,我在c中有以下静态函数# 正如您在注释中看到的,我只希望保留名称作为返回值,但是我希望能够取出concat变量的值以将其分配给标签,但是当我尝试编译器拒绝时,可以这样做吗?附近有工作吗 谢谢。非静态: public string Greet(string name) { const string greeting = "welcome "; string concat = string.Concat(greeting, name); Label1.Text = conc
public string Greet(string name)
{
const string greeting = "welcome ";
string concat = string.Concat(greeting, name);
Label1.Text = concat;
return name;
}
或者仍然静态地传递标签,如问候(“John”,Label1)
:
但不确定为什么在任何情况下都需要返回名称……如果在调用函数时有名称,则在将返回的范围中已经有了名称。例如:
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;
}
(其中,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 static string Greet(string name)
{
return string.Concat("Welcome ", name);
}
然后像这样使用它:
string name = "John";
label1.Text = Greet(name);
Web方法不必是静态的。为什么要将函数设置为静态的?显而易见的解决方案是使其不是静态的。更不用说在本例中返回参数似乎很奇怪。它是静态的,因为它被修饰为[WebMethod],然后用Ajax调用,返回值被传递给Ajax,我仍然需要在代码隐藏中使用concat变量。-谢谢你,尼克,这只是一个简单的例子,只有名字。它是静态的原因是它被[WebMethod]属性修饰。但是,我不知道是否有一种方法可以从Ajax访问页面方法而不将其声明为静态。@tika-啊,在这种情况下,是的,它必须是静态的。嗨,Nick,我尝试了这个示例,但编译器抱怨System.Web.UI.WebControl.Label“不包含“文本”的定义。很抱歉,我是个笨蛋,我只是在学习。谢谢你,马克,这真的很有道理。我正在尝试嗨,马克,谢谢你。好的,我制作一个包装器,我可以给它赋值:公共类MyType{private string x;公共字符串Greeting{get{return x;}set{x=value;}}然而,在执行Greet方法之后,我仍然很难弄清楚如何将wrapper属性分配给标签。提前感谢。Hi Nismoto,你说得对,但这是另一种情况,我希望能够在不使用返回值的情况下获取信息,返回值已经被使用了。我曾尝试在ASP.NET3.5中使用Ajax调用页面方法,它们不要求是静态的,但是在.NET2.0中,除非声明为静态,否则它们无法工作。但我想这将是另一个单独的问题。
public static string Greet(string name)
{
return string.Concat("Welcome ", name);
}
string name = "John";
label1.Text = Greet(name);