C# 销毁对象及其所有引用

Nic*_*nna 4 c# object-reference

下面的 C# 代码

ResBlock resBlock1 = new ResBlock();                
resBlock1.CustomerID = "ABC";

Block block = new Block();
block.Tag = resBlock1;

resBlock1 = null;

Console.WriteLine(((ResBlock)block.Tag).CustomerID);
Run Code Online (Sandbox Code Playgroud)

输出将是“ABC”。当然,这是我面临的例子,但我的代码要复杂得多。

我想了解的是,是否有一种方法可以获取block.Tag = null引用对象 ( resBlock1) 以null其他方式设置或销毁的时间(哪种方式?)。

类非常简单,因为这只是一个例子:

public class ResBlock: IDisposable
{
    public DateTime From { get; set; }
    public DateTime To { get; set; }
    public string CustomerID { get; set; }
    public string ItemID { get; set; }

    [...]

    public ResBlock() {
        DaysStatus = new List<ResBlockDayStatus>();
        Deleted = false;
    }

    public bool LogicallyDeleted { get; set; }

    public void Dispose() { }
}

public class Block
{        
    public bool Selected { get; set; }
    public object Tag { get; set; }
    public DateTime From { get; set; }
    public DateTime To { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

不。你不能以那种方式“摧毁”一个物体。这不是对象生命周期在 .NET 中的工作方式。您可能将该Tag属性更改为WeakReference. 这将阻止该Tag属性使对象保持WeakReference活动状态......但您仍然无法主动请求对象销毁。