如何在静态方法中引用非静态对象

本文关键字:静态 对象 引用 静态方法 | 更新日期: 2023-09-27 18:03:30

我创建了一个文本框,并希望在静态方法中引用它。我怎么能做到呢?这是我的代码

    private void Form1_Load(object sender, EventArgs e)
    {
        TextBox textbox2 = new TextBox();
        textbox2.Text = "A";
    }
    static void gettext() 
    {
        textbox2.Text = "B"; //here is my problem
    } 

如何在静态方法中引用非静态对象

您需要以某种方式将其传递到静态方法中,最简单的选择是展开方法签名以接受文本框:

static void gettext(TextBox textBox) 
{
    textBox.Text = "B"; //here is my problem
} 

您应该将文本框作为静态方法的参数

static void gettext(TextBox textbox)
{
    textbox.Text = "B";
}

我不确定你理解静态是什么意思,静态意味着它属于class而不是类的INSTANCE。可能一个更好的解决方案是创建一个实例方法来设置文本。

// private variable
private TextBox textbox2;
private void Form1_Load(object sender, EventArgs e)
{
    // refers to private instance variable
    textbox2 = new TextBox();
    textbox2.Text = "A";
}
private void gettext() 
{
    // refers to private instance variable
    textbox2.Text = "B";
} 

如果你理解static有困难,很可能你不需要使用它。静态成员可用于类的所有实例,但不属于任何一个实例,这意味着静态方法不能访问私有成员。

你可以这么做

static void gettext(TextBox textbox2) 
{
    textbox2.Text = "B";
} 

代码

private void Form1_Load(object sender, EventArgs e)
{
    YourClass.gettext(textbox2);
}

您可以在Load:

上创建一个静态变量集
private static readonly TextBox _textBox = new TextBox();
private void Form1_Load(object sender, EventArgs e)
{
    _textBox.Text = "A";
}
static void gettext()  
{ 
    _textbox2.Text = "B";
}