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

C# 从类调用窗体时发生堆栈溢出

C# 从类调用窗体时发生堆栈溢出,c#,winforms,stack-overflow,C#,Winforms,Stack Overflow,当我从我的类调用我的表单时,我得到一个StackOverflowException 在我的MainForm中,我使用这个调用Youtube.cs类,Youtube yt=newyoutube()。然后在我的Youtube类中,我使用,mainformmain=newmainform()调用MainForm。我相信这就是导致StackOverflow的原因,因为它似乎在创建一个循环 我需要从MainForm访问Youtube类,也需要从我的Youtube类访问MainForm,那么有没有办法避免堆

当我从我的类调用我的表单时,我得到一个
StackOverflowException

在我的
MainForm
中,我使用这个调用
Youtube.cs
类,
Youtube yt=newyoutube()。然后在我的
Youtube
类中,我使用,
mainformmain=newmainform()调用
MainForm
。我相信这就是导致StackOverflow的原因,因为它似乎在创建一个循环

我需要从
MainForm
访问
Youtube
类,也需要从我的
Youtube
类访问
MainForm
,那么有没有办法避免堆栈溢出

这是从
main表单顶部开始的:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    Youtube yt = new Youtube();
这是Youtube.cs的顶部:

class Youtube
{
    MainForm main = new MainForm();

将表单对象传递给YouTube类,并在YouTube类中使用该对象

public class Youtube
{
     MainForm m_MainForm = null;
     public Youtube(MainForm frm)
     {
            m_MainForm = frm;
     }

}  

是的,这导致了
StackOverFlowException

一种方法是通过构造函数将表单传递到
Youtube
类中


示例:

main窗体中
类:

Youtube yt = new Youtube(this)

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        yt = new Youtube(this);
    }

    Youtube yt = null;
public Youtube(MainForm mainform)
{
    // do something with mainform
}
Youtube
类中:

Youtube yt = new Youtube(this)

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        yt = new Youtube(this);
    }

    Youtube yt = null;
public Youtube(MainForm mainform)
{
    // do something with mainform
}

您需要将
MainForm
作为参数传递给
YouTube

public class MainForm
{
   private Youtube youtube;
   public MainForm()
   {
       youtube = new Youtube(this);
   }
}
然后在Youtube
Youtube
类中存储此引用:

public class Youtube
{
   private MainForm form;

   public Youtube(MainForm form)
   {
       this.form = form;
   }
}

你能展示一些代码吗?我们需要了解每个类如何“访问”另一个类