gpt4 book ai didi

C#:收集 WeakReference 之前的通知?

转载 作者:太空狗 更新时间:2023-10-29 17:35:34 26 4
gpt4 key购买 nike

在C#/.NET中,有没有办法在弱引用指向的对象被析构之前得到通知?基本上,我想允许收集一个对象,但在对象被销毁之前做一些事情,而不修改代码以添加析构函数(因为我不知道我的代码将起诉哪些类型的对象)。

谢谢,罗伯特

最佳答案

.Net 4.0 有你需要的解决方案:ConditionalWeakTable .这是一个演示这个想法的简短程序。 (也讨论了 here)

using System;
using System.Runtime.CompilerServices;

namespace GCCollectNotification
{
class ObjectToWatch { }

class Notifier
{
public object ObjectToWatch { get; set; }
~Notifier() { Console.WriteLine("object is collected"); }
}

class Program
{
private ConditionalWeakTable<object, Notifier> map
= new ConditionalWeakTable<object, Notifier>();

public void Test()
{
var obj = new ObjectToWatch();
var notifier = map.GetOrCreateValue(obj);
notifier.ObjectToWatch = obj;
}

static void Main(string[] args)
{
new Program().Test();

GC.Collect();
GC.WaitForPendingFinalizers();

// "object is collected" should have been printed by now

Console.WriteLine("end of program");
}
}
}

关于C#:收集 WeakReference 之前的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1145529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com