C# Уничтожить объект и все ссылки на него - PullRequest
3 голосов
/ 23 апреля 2020

Ниже C# код

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

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

resBlock1 = null;

Console.WriteLine(((ResBlock)block.Tag).CustomerID);

Вывод будет "AB C". Конечно, это пример того, с чем я сталкиваюсь, но мой код намного сложнее.

Я хотел бы понять, есть ли способ получить 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; }
}

1 Ответ

6 голосов
/ 23 апреля 2020

Нет. Вы не можете «уничтожить» объект таким образом. Это просто не то, как работают времена жизни объекта. NET. Вы можете потенциально изменить свойство Tag на WeakReference. Это помешало бы свойству Tag сохранить объект внутри WeakReference живым ... но вы все равно не сможете активно запрашивать уничтожение объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...