【问题标题】:how to reference a non static object in a static method如何在静态方法中引用非静态对象
【发布时间】:2013-02-26 11:58:10
【问题描述】:

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

    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
    } 

【问题讨论】:

  • 你不能。你需要一个对象。
  • 另请注意,Form1_Load 中的代码 textbox2 是方法的本地,而不是类的本地。在 Form1_Load 之外定义文本框 textbox2
  • 请告诉我怎么做。我是 C# 新手。
  • 谁能告诉我如何在我的静态方法中对 texbox2 进行对象引用?

标签: c# methods static textbox


【解决方案1】:

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

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

【讨论】:

  • @user1853846 不要忘记接受您认为最好的答案(在本例中为 Lloyd's)
  • @user1853846 如果您不知道如何接受答案,或者不知道为什么要这样做:meta.stackexchange.com/questions/5234/…
【解决方案2】:

我不确定您是否理解静态的含义,静态意味着它属于 CLASS 而不是该类的实例。可能更好的解决您的问题的方法是创建一个设置文本的实例方法。

// 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 方法,但据我所知,这是一个完全有效的答案,我错过了什么吗?
  • 也不知道为什么(它没有直接回答明确的问题,是的,但它肯定给出了可能是最好和最有用的答案,在我看来)+1
【解决方案3】:

你应该把你的文本框作为静态方法的参数

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

【讨论】:

    【解决方案4】:

    你可以这样做

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

    在代码中

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

    【讨论】:

      【解决方案5】:

      您可以在 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";
      } 
      

      【讨论】:

      • 文本框是只读的,永远不会重新分配,只有 Text 属性。如果您愿意,可以删除只读并在 Load 方法上创建 TextBox。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      相关资源
      最近更新 更多