Удалить вторую ссылку на объект - PullRequest
0 голосов
/ 25 апреля 2018

Я получил что-то вроде следующего:

class Factory{
    private List<FactorizableObject> _collected; //Collection of all created objects

    public FactorizableObject createObject (someParams DontMatter){
        FactorizableObject newObject = new FactorizableObject(DontMatter);
        _collected.Add(newObject);
        return newObject;
    }

    public void DoSomethingWithCollectedObjects(){
        //Work with created objects
    }
}

class UsingClass1{
    private FactorizableObject myObject;

    public UsingClass1(){
        myObject = Factory.createObject(someParams);
    }
}

class UsingClass2{
    private FactorizableObject myObject;

    public UsingClass2(){
        myObject = Factory.createObject(someOtherParams);
    }
}

class WorkingClass{
    List<UsingClass1> someOfThese;
    List<UsingClass2> someOfThose;

    private void triggerWork(){
        someOfThese.Remove(RemoveSomeObject);
        Factory.DoSomethingWithCollectedObjects();
    }

}

Теперь моя проблема: даже если я удаляю экземпляр usingClass из одного из этих списков, записи на фабрике все еще остаются живыми и используютсяпри вызове DoSomethingWithCollectedObjects.Я ожидал что-то вроде NullreferenceException при попытке работать с объектом.

Вопрос: Есть ли способ убить объект (ссылку на объект) без явного удаления его из фабричной коллекции?Это должно быть сделано в любом классе, использующем фабрику, поэтому я хотел бы обойти это ...

Мне нужна такая коллекция, чтобы выполнить некоторые специальные действия над факторизованными объектами и не хочу заботитьсягде они расположены (действие должно быть сделано на ВСЕХ объектов).Я уже пытался установить UsingClass1.myObject = null перед удалением объекта, но это только удалило мою ссылку на разложенный объект.

...