Освобождение ресурсов и ошибка System.NullReferenceException - C#
Формулировка задачи:
Я написал класс:
Который в веду сложности создания, имеет в конструкторе ряд эксепшенов типа:
Это один из основных модулей приложения. Но, приложение должно работать и само по себе без этого класса! В связи с этим я написал функцию которая создаёт этот класс:
И дабы не утруждать себя лишними конструкциями типа
написал деструктор для своего Database, рассчитывая на то, что при успешном создании класса быдет выполнен ряд неких действий ( сохранение настроек ), а в случае не успешного создания просто ничего не произойдёт.
Но не тут то было, деструктор всё ровно вызывается, но для класса который не был успешно создан и ссылка на которого потерялась. Вопрос, как мне это разрешить? Эксепшен 'System.NullReferenceException' вот такой. Вылетает на строчке Settings.Database.Default.IsFree = Program.database.Free; . И это мне кажется очень странным))) Спасибо за помошь или за объяснение происходящего.
Листинг программы
- public class Database
Листинг программы
- throw new Exception("бла бла бля");
Листинг программы
- private static Database CreateDatabase()
- {
- try
- {
- Database data = new Database();
- return data;
- }
- catch (Exception ex)
- {
- MessageBox.Show("Can not create database module: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return null;
- }
- }
Листинг программы
- if(database != null)
Листинг программы
- ~Database()
- {
- Settings.Database.Default.IsFree = Program.database.Free;
- Settings.Database.Default.Save();
- }
Решение задачи: «Освобождение ресурсов и ошибка System.NullReferenceException»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- namespace ConsoleApplication4
- {
- class Program
- {
- static void Main(string[] args)
- {
- //Создаем объект
- MyClass mc = new MyClass();
- //Подписываемся на событие объекта
- mc.myEvent += delegate(object sender, EventArgs e)
- {
- Console.WriteLine("Произошло событие в объекте: {0}", sender.GetType().Name);
- };
- //Вызываем метод объекта и обрабатываем событие
- mc.MakeEvent();
- Console.ReadLine();
- }
- }
- public class MyClass
- {
- //Событие
- public event EventHandler myEvent;
- public MyClass() { }
- //Метод генерирующий событие в MyClass
- public void MakeEvent()
- {
- //Проверка на наличие подписчиков на событие
- if (myEvent != null)
- myEvent(this, new EventArgs());
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д