C#学习教程:在c#中存储引用分享


在c#中存储引用

我正在尝试设计一个类,它可以在销毁时更新对象(类外)的引用。

所以基本上你创建了这个对象的实例并传递了一个引用类型(以任何方式,构造函数等),然后在对象的销毁时,原始引用已经更改为由对象创建的引用。

如果我通过引用传递引用(比如在构造中),我无法想出一种方法来存储此引用(作为参考)以供析构函数更新它? 例如(伪):

class Updater { object privateReference; public Updater(ref object externalReference) { privateReference = externalReference; //is privateReference now a new reference to the original object? } ~Updater() { privateReference = new object(); //therefore this isn't 'repointing' the externalReference } } 

这里的关键是我不是要试图从这个类中改变原来的“外部”对象,我试图“重新命名”它,或者如果你愿意,可以将它初始化。

基本上你不能这样做。 ref仅适用于方法本身。

目前还不清楚您想要使用它 – 您能否提供更多信息,以便我们建议其他设计? 任何依赖终结器的东西都是令人不安的,说实话……

这不起作用,因为构造函数参数的ref方面仅适用于构造函数。

我要做的是给构造函数一个委托,可以用来更新有问题的东西。 此外,你应该使用IDisposable (与using块一起using )而不是终结器; 终结器不应该触及托管对象(它们旨在释放非托管对象)。

 class Updater : IDisposable { Action setter; public Updater(Action setter) { this.setter = setter; } public Dispose() { setter(new object()); } } 

请注意,使用这样的Finalizer与C ++中的析构函数不同。

当最后一个引用死亡时(可能它超出范围),该对象进入Finalizer队列。 GC确定何时调用终结器,并且可能在最后一次引用死亡后很长时间。

上述就是C#学习教程:在c#中存储引用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/960094.html

发表评论

邮箱地址不会被公开。 必填项已用*标注