不断重复的类构造函数-类对象似乎正在实例化自己

时间:2018-10-11 17:03:11

标签: c# constructor infinite-loop

我目前遇到一个问题,一个类似乎正在创建其自身的实例或重复其构造函数,从而导致无限循环。

我有一个名叫旅馆的辛格尔顿。当前,它包含一个二维数组的Room(Room[,] HotelGridLayout)和一个其来宾/客户列表(Guests)。它在酒店构造函数的最后一行创建一个客户。

客户构造函数:

public Customer(string _classPref, Room _entrance)
{
    ClassificationPreference = _classPref; // Preference for classification (type of room)
    FilePath = @"HotelPictures\Customer.png"; // String for image file path

    CheckIn(_entrance);
}

CheckIn():

private void CheckIn(Room _entrance)
{            
    _entrance.UpdateForgroundImage(FilePath);
    Room _roomAvailable = HotelForm.Instance.CheckInAtHotel(ClassificationPreference);

    // some more stuff that doesn't even get reached.
}

酒店构造函数的重要部分:

private HotelForm()
{
    HotelGridLayout = JsonToHotelLayout.DeserializeHotelLayout(JsonString); // not the issue
    Customers = new List<MovableObject>();
    Cleaners = new List<MovableObject>();
    MovableObject _testGuest = new Customer("5 stars", HotelGridLayout[1, 0]);
}

这是交易:在_entrance.UpdateForgroundImage(FilePath);之后,恰好在调用CheckInAtHotel()之前,它要么创建新的Customer类,要么重新运行构造函数。它不应该与UpdateForgroundImage有任何关系,因为它会分配显示在PictureBox中的图像(1行)。

UpdateForgroundImage:

public virtual void UpdateForgroundImage(string _imageFilePath)
{
    PictureBoxRoom.Image = Image.FromFile(Path.Combine("..", "..", "..", "..", _imageFilePath));
}

这是怎么回事?我只是瞎了,错过了完全显而易见的东西吗?

问题来源

我找到了问题的根源:在Customer.CheckIn()中,我通过其静态属性获取了HotelForm实例。由于该客户是在HotelForm的构造函数中创建的,并且在设置实例之前先请求了该实例,因此它会继续创建/更新HotelForm的实例;该代码说明了原因:

public static HotelForm Instance
    {
        get
        {
            lock (_padlock)
            {
                if (_instance == null)
                {
                    _instance = new HotelForm();
                }
                return _instance;
            }
        }
    }

该实例尚不存在,因为构造函数尚未完成(可以这么说),因此它创建了HotelForm的新实例,并重复了因此不断创建客户的过程。

0 个答案:

没有答案