Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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#_Winforms - Fatal编程技术网

C# 如何调用引用类参数的方法?

C# 如何调用引用类参数的方法?,c#,winforms,C#,Winforms,所以我一直在想如何让我的代码通宵工作。我一直在阅读各种各样的东西,试图找出我做错了什么,但我尝试的每件事最终都是在同一个问题上。我试图通过在方法中引用来更改类中的变量,这样它将在类中而不仅仅是本地更改。但是我不知道把什么作为ref故事板SB的参数。有人能告诉我应该怎么做吗?我已经尝试过将它设置为null,即使是通过一个变量,它也不起作用。另外,“故事板”是我正在编写代码的类 public class StoryBoard { public string[] TextBoxes = new

所以我一直在想如何让我的代码通宵工作。我一直在阅读各种各样的东西,试图找出我做错了什么,但我尝试的每件事最终都是在同一个问题上。我试图通过在方法中引用来更改类中的变量,这样它将在类中而不仅仅是本地更改。但是我不知道把什么作为ref故事板SB的参数。有人能告诉我应该怎么做吗?我已经尝试过将它设置为null,即使是通过一个变量,它也不起作用。另外,“故事板”是我正在编写代码的类

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.
    }
}
简单地尝试

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

this.Counter++; // Adds 1 to the counter.
在此基础上展开,当前对象中的所有变量将始终可以在普通方法中访问(即非静态),除非相同范围中存在同名变量,其中范围可以是方法或大括号之间的单个块

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

但是我不知道把什么作为ref故事板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.
}

这也是在C#中,您试图更改哪个变量?我猜
计数器
?所有这些代码都属于类情节提要?@SirRufo是的does@Donut那么您的代码示例也应该说明这一事实——我刚刚编辑了您的问题。请复习一下我们知道怎么做:
SB.Counter++;//将1添加到计数器。
您应该添加一个事实,即在这种情况下不需要ˋrefˋ。我很高兴您提到了它,我并不想详细介绍Value&ref类型以及ByVal和ByRef参数。我能读懂它。“这是一个比这个问题更重要的话题。”Donut read和Jon Skeet的答案以及him@SirRufo我添加了您所说的内容,但唯一的问题是,在我需要实例化引用的方法中,我在运行程序时得到了stackOverflowException。该方法内部是initializeComponent();当我将鼠标悬停在它上面时,它会显示“设计器支持所需的方法-不要使用代码编辑器编辑此方法的内容”。因此,我删除了引用代码,它再次工作,但我如何才能引用故事板?我还读了你发布的链接,非常有用,谢谢:)另外,我不知道这是否重要,但我正在制作一个windows窗体project@JeremyThompson我意识到我在评论中提到了错误的人