Добрый день. Что выведется на консоль после первого эникея? А после второго?? Почему так? Я знаю, что ГК работают "случайно" и не гарантируют вызов деструктора, как-только количество ссылок на объект будет равно 0, но все же...
Как сделать, чтоб выводило то, что хочет программист?
class Task
{
public event EventHandler Completed;
public void OnCompleted()
{
if (Completed != null)
Completed(this, EventArgs.Empty);
}
}
class Sheduller
{
public Sheduller(Task task )
{
Console.WriteLine("Create");
task.Completed += delegate { Console.WriteLine("Completed"); };
}
~Sheduller()
{
Console.WriteLine("Destroy");
}
}
class Program
{
static void Main(string[] args)
{
Sheduller sheduller;
{
Task task = new Task();
sheduller= new Sheduller(task);
sheduller= new Sheduller(task); //Ссылка на первый экземпляр sheduller потеряна
sheduller= new Sheduller(task); //Ссылка на второй экземпляр sheduller потеряна
task .OnCompleted();
Console.ReadKey();
}
Console.ReadKey();
}
}
Что хочет программист:
Необходимо, чтобы после трех Create выводился ОДИН Completed, т.к. по его скромному мнению сейчас живет один экземпляр класса Sheduller