Как я могу получить класс для «сброса»? - PullRequest
0 голосов
/ 22 июля 2010

Я пишу приложение на C # .NET. У меня есть форма. Когда форма создана, я создаю экземпляр класса. Когда я закрываю форму, я хочу избавиться от класса, чтобы в следующий раз, когда я открою форму, я мог просто создать новый новый экземпляр класса. Итак, в событие form_Closing я добавил код, подобный следующему: classInstance = null; Проблема, по какой-то причине, в следующий раз, когда я открываю форму, класс не равен нулю, а находится в том же состоянии, в котором он находился до этого. Я закрыл форму. Почему это происходит?

РЕДАКТИРОВАТЬ: Добавление информации:

myHandler - это поле в классе Form. это выглядит так:

private HSFW_Handler myHandler;

Класс, на который я ссылаюсь, является одиночным, поэтому я создаю его так:

    public static HSFW_Handler GetInstance()
    {
        if (myHSFW == null)
        {
            myHSFW = new HSFW_Handler();
            return myHSFW;
        }
        else return myHSFW;
    }

Я создаю его начальный экземпляр в событии Form_Shown

    private void SetupDialogForm_Shown(object sender, EventArgs e)
    {
        try
        {
            myHandler = HSFW_Handler.GetInstance();
            UpdateDisplay();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

Закрытие формы выглядит следующим образом ...

private void SetupDialogForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        myHandler = null;
    }

Ответы [ 2 ]

3 голосов
/ 22 июля 2010

Давайте посмотрим на этот код:

public static HSFW_Handler GetInstance()
{
    if (myHSFW == null)
    {
        myHSFW = new HSFW_Handler();
        return myHSFW;
    }
    else return myHSFW;
}

И это:

private void SetupDialogForm_FormClosing(object sender, FormClosingEventArgs e)
{
    myHandler = null;
}

Заметили что-нибудь?

Вы устанавливаете myHandler на null;но это, кажется, член уровня экземпляра SetupDialogForm.Или в любом случае, это не то же самое, что myHSFW, который является вашей статической переменной в классе HSFW_Handler.

Когда вы делаете это ...

myHandler = HSFW_Handler.GetInstance();

... выделаете myHandler ссылку на тот же объект, на который указывает HSFW_Handler.myHSFW;но они все еще две отдельные ссылки.Установка одного на null не влияет на другое.

Суть всего этого в том, что вам нужно изменить значение myHSFW на null, чтобы получить поведение, которое вам, по-видимому, нужно.

Я бы сделал это так:

public class HSFW_Handler
{
    public static void DeleteInstance()
    {
        myHSFW = null;
    }
}

Тогда:

private void SetupDialogForm_FormClosing(object sender, FormClosingEventArgs e)
{
    HSFW_Handler.DeleteInstance();
}
0 голосов
/ 22 июля 2010

Вы уверены, что событие form_Closing происходит, так что вы закрываете форму, а не скрываете ее?

Если это так, то ищите код, ища каждый раз, когда classInstance установлен на что-то. Вы, вероятно, найдете виновника в конструкторе или рядом с ним или в другом событии, таком как Load или Shown.

...