Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将C#静态方法中的值指定给标签_C#_Asp.net_Static_Methods - Fatal编程技术网

如何将C#静态方法中的值指定给标签

如何将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

我在c中有以下静态函数#

正如您在注释中看到的,我只希望保留名称作为返回值,但是我希望能够取出concat变量的值以将其分配给标签,但是当我尝试编译器拒绝时,可以这样做吗?附近有工作吗

谢谢。

非静态:

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);