Тут кто-то в соседнем форуме плакалася, что нет статей и Q&A. Вот, так сказать, для разугреву:
Предположим, что необходимо, чтобы создавался только один объект для заданного класса. Поскольку реализация этой задачи на С# даже не заслуживает внимания, мы сосредоточимся на её более интересном варианте: пусть кроме этого нам известно, что этот объект ресурсоёмкий, но создавать его мы можем очень быстро. Тогда было б хорошо чтоб он удалялся всякий раз когда он нам не нужен. Конечно удалять что-то нам не позволено, но намекнуть мы можем:
public sealed class X
{
public static X Instance()
{
object o = wr.Target; // существует ли ещё объект?
if (o == null) // если нет, то создаём его заново
{
o = new X();
wr.Target = o;
}
return o as X; // возвращаем объект
}
private X(){}
private static WeakReference wr = new WeakReference(null);
}
А вот как это работает:
X x = X.Instance(); // нам понадобился объект.
// здесь мы его используем
...
// пусть в какой-то момент x вышел из области видимости и GC начал собирать мусор
// поскольку в классе X мы храним слабую ссылку на объект, то он будет удалён
...
X x = X.Instance(); // нам опять понадобился объект.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте Mishka.NET, Вы писали:
M.NET>Тут кто-то в соседнем форуме плакалася, что нет статей и Q&A. Вот, так сказать, для разугреву:
Будь поосторожней в высказываниях