Освобождение ресурсов и ошибка 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()); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д