Класс WeakReference
Пока жива обычная ссылка, цель
доступна через
Target
и
IsAlive.
У
TryGetTarget
- тип
WeakReference<T>.
Строковые литералы интернированы -
берут new object().
Синтаксис
object obj = new object();
var weak = new WeakReference(obj);
Пример
Давайте создать слабую ссылку на объект:
using System;
class Program
{
static void Main()
{
object obj = new object();
var weak = new WeakReference(obj);
bool res = weak.IsAlive;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте прочитать цель через
Target:
using System;
class Program
{
static void Main()
{
object obj = new object();
var weak = new WeakReference(obj);
bool res = weak.Target != null;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте обнулить сильную ссылку и собрать мусор:
using System;
class Program
{
static void Main()
{
object obj = new object();
var weak = new WeakReference(obj);
obj = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
bool res = weak.IsAlive;
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Смотрите также
-
свойство
Target,
объект если жив -
метод
TryGetTarget,
взять если жив -
свойство
IsAlive,
объект ещё жив -
метод
Collect,
сборка мусора