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