Я получил что-то вроде следующего:
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 перед удалением объекта, но это только удалило мою ссылку на разложенный объект.