C# 创建一个实例而无需无休止的实例化

C# 创建一个实例而无需无休止的实例化,c#,winforms,constructor,C#,Winforms,Constructor,行:mdv=newmapdesignerview()创建无限的实例化(无限循环)。请参见下面的代码: public partial class MapDesignerView : Form { public MapDesignerView mdv; public Map map; public MapController mapController; public MapConstructor mapConstructor; MouseEventHa

行:
mdv=newmapdesignerview()创建无限的实例化(无限循环)。请参见下面的代码:

public partial class MapDesignerView : Form
{
    public  MapDesignerView mdv;
    public  Map map;
    public  MapController mapController;
    public MapConstructor mapConstructor;
    MouseEventHandler detectMouse;

    public MapDesignerView()
    {
        mdv = new MapDesignerView();
        map = new Map(mdv);
        mapController = new MapController(map);
        mapConstructor = new MapConstructor(mapController);
        detectMouse = new MouseEventHandler(mapController);
        InitializeComponent();
    }
}

如您所见,我需要在
mapDesignView
类中创建一个
MapDesignerView
类的实例,以传递给另一个类构造函数。如何以不同的方式将此表单传递给映射构造函数,使其不会无休止地实例化?

听起来像是在寻找引用当前实例的
this

mdv = new MapDesignerView();
map = new Map(mdv);
这将创建一个新对象(最终导致堆栈溢出)

相反,你想要的是

map = new Map(this);

通过扩展,您不再需要
mdv
变量。

如果您真的想将
MapDesignerView
的实例传递给自身,您可以使用具有如下约定的构造函数:

public MapDesignerView(MapDesignerView map)

是的,谢谢。如果允许的话,我将在十分钟内接受这个答案。您将如何实例化它?可以使用
new
(或某种工厂方法)实例化.NET中的每个封闭类(甚至是表单)。我没有设置需求,只是提供了一个潜在的解决方案。如何将实例传递给自身?这就是为什么我们要这样做。将
null
传递到初始实例以指示顶层,或者使用建议的重载覆盖它,而不是替换现有构造函数。实施取决于询问者的需求。。。而不是试图回答整个项目一小部分的人。