gpt4 book ai didi

C#:有什么方法可以轻松查找/更新对对象的所有引用?

转载 作者:太空狗 更新时间:2023-10-29 21:20:26 27 4
gpt4 key购买 nike

我一直在阅读 Rockford Lhotka 的“Expert C# 2008 Business Objects”,其中有一个数据门户之类的东西,它很好地抽象了数据的来源。当使用 DataPortal.Update(this) 时,您可能猜到它会将“this”持久保存到数据库中,返回一个对象 - 持久化的“this”以及数据库对其所做的任何更改,例如。时间戳。

Lhotka 经常非常随意地写道,您必须确保将对旧对象的所有引用更新为新返回的对象。有道理,但是有没有一种简单的方法可以找到对旧对象的所有引用并更改它们?显然 GC 跟踪引用,是否可以利用它?

干杯

最佳答案

profiling API's这样做但不适合一般消费。一种可能的解决方案,也是我自己使用的一种解决方案,是在基类中实现一种跟踪机制,其中对象的每个实例都将其自身的 WeakReference 添加到静态集合中。

我已经为 DEBUG 版本进行了条件编译,但在发布版本中依赖它可能不是一个好主意。

// simplified example
// do not use. performance would suck
abstract class MyCommonBaseClass {

static readonly List<WeakReference> instances = new List<WeakReference>();

protected MyCommonBaseClass() {
lock (instances) {
RemoveDeadOnes();
instances.Add(new WeakReference(this));
}
}

}

关于C#:有什么方法可以轻松查找/更新对对象的所有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2349430/

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