如何通过引用类参数来调用方法?

时间:2017-04-21 05:47:06

标签: c# winforms

所以我一直想弄清楚如何让我的代码整夜工作。我一直在阅读各种各样的东西,并试图找出我做错了什么,但我尝试的一切我最终都出现在同一个问题上。我试图通过在方法中引用它来更改我的类中的变量,因此它将在类中更改而不仅仅在本地更改。但我不知道将什么作为参考资料Storyboard SB的参数。有人可以告诉我应该做什么,我已经尝试将其设置为null,即使通过变量它也不起作用。 “StoryBoard”也是我正在编写代码的类。

public class StoryBoard
{
    public string[] TextBoxes = new string[10];
    public int Counter = 0;
    private void RtClickButton_Click(object sender, EventArgs e)
    {
        RtClickButton_ClickImpl(sender, e, "what would I put here?");
    }

    private void RtClickButton_ClickImpl(object sender, EventArgs e, ref StoryBoard SB)
    {
        string TBT = TxtBox.Text;
        switch(Counter)
        {
            case 0:
                TextBoxes[Counter] = TBT;
                break;
        }
        SB.Counter++; // Adds 1 to the counter.
        LtClickButton.Enabled = true;
        TxtBox.Clear(); // Clears the text box.
    }
}

2 个答案:

答案 0 :(得分:1)

尝试简单

Counter++;

或者如果有疑问,您可以使用this关键字来引用此类的实例成员,例如

this.Counter++; // Adds 1 to the counter.

为了扩展这一点,当前对象的所有变量总是可以在普通方法中访问(即不是静态的),除非在同一范围内存在同名变量,其中范围可以是方法或单个在花括号之间阻挡。

如果使用this关键字,它将始终引用属于对象/类的变量,而不是在不同范围内定义的内联变量。

答案 1 :(得分:-1)

  

但我不知道将什么作为参考资料故事板SB的参数。

为SB保留私有成员变量:

private StoryBoard _SB = null;  //A member variable to hold the StoryBoard object

public class Form1WhatEver
{
  public Form1WhatEver()
  {
      //Instantiate a reference to the StoryBoard and hold it in the private member variable
      _SB = new StoryBoard();
  }

  public string[] TextBoxes = new string[10];
  public int Counter = 0;
  private void RtClickButton_Click(object sender, EventArgs e)
  {
      RtClickButton_ClickImpl(sender, e, ref _SB); //Pass the instance of StoryBoard byRef.

      //Check that our _SB Counter variable was incremented (+1)
      System.Diagnostics.Debug.WriteLine(_SB.Counter.ToString()); 
  }

  private void RtClickButton_ClickImpl(object sender, EventArgs e, ref StoryBoard SB)
  {
      string TBT = TxtBox.Text;
      switch(Counter)
      {
        case 0:
            TextBoxes[Counter] = TBT;
            break;
       }
       SB.Counter++; // Adds 1 to the counter.
       LtClickButton.Enabled = true;
       TxtBox.Clear(); // Clears the text box.
}