在c#中存储引用

Ada*_*lor 6 c# reference-type

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

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

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 7

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

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


Tim*_*son 5

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

我要做的是给构造函数一个可用于更新相关事物的委托。此外,您应该IDisposable为此使用(与using块结合)而不是终结器;终结器不应触及托管对象(它们旨在释放非托管对象)。

class Updater : IDisposable
{
    Action<object> setter;

    public Updater(Action<object> setter)
    {
        this.setter = setter;
    }

    public Dispose()
    {
        setter(new object());
    }
}
Run Code Online (Sandbox Code Playgroud)