3

行:mdv = new MapDesignerView();無限のインスタンス化 (無限ループ) を作成します。以下のコードを参照してください。

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();
    }
}

ご覧のとおり、別のクラス コンストラクターに渡すために、MapDesignerViewクラス内にクラスのインスタンスを作成する必要があります。mapDesignViewこのフォームを別の方法で Map コンストラクターに渡して、無限にインスタンス化しないようにするにはどうすればよいですか?

4

3 に答える 3

6

this現在のインスタンスを参照する を探しているようです。

于 2013-09-17T00:41:55.930 に答える
2

のインスタンスをそれ自体に渡したい場合はMapDesignerView、次のようなコントラクトを持つコンストラクターを使用してそれを行うことができます。

public MapDesignerView(MapDesignerView map)
于 2013-09-17T00:43:19.197 に答える
1
mdv = new MapDesignerView();
map = new Map(mdv);

これにより、新しいオブジェクトが作成されます (最終的にスタックがオーバーフローします)。

代わりに、あなたが望むのは

map = new Map(this);

mdvそして拡張により、変数はもう必要ありません。

于 2013-09-17T00:43:08.437 に答える