Допустим, у меня есть класс:
class MyClass
{
object AnObject;
public object GetObject(BlackBoxObjectMaker ObjMaker)
{
if(AnObject == null)
AnObject = ObjMaker.MakeObject(); //MakeObject may call GetObject on this MyClass instance
return AnObject;
}
}
Чья работа заключается в создании и предоставлении доступа к объектам с помощью BlackBoxObjectMaker «по требованию» через GetObject ().
Позвольте также сказать, что MyClass может быть вызван для предоставления объекта 'x', члены которого содержат члены, которые ссылаются на 'x'.
В этом случае GetObject ()в конечном итоге вызовет себя для того же экземпляра MyClass, что приведет к переполнению стека.
MyClass может быть изменен для определения, когда GetObject () вызывает себя для того же экземпляра, но в этом случае, как может GetObject () вернуть ссылку на AnObject, что BlackBoxObjectMaker еще не закончил?
Как я могу предоставить ссылку на объект, прежде чем у меня будет ссылка на этот объект?Есть ли такая вещь, как «заполнитель» в C #?
Вероятный дубликат, но, кроме комментария Уилла А, я не вижу ничего, имеющего отношение к контексту в этом вопросе
Дополнительная информация:
Это часть инструмента сериализации, предназначенная для поддержки циклических ссылок.В этом конкретном случае инструмент может быть переписан так, что ссылка на объект может быть взята до того, как его свойства заполнены (и ссылка необходима), как говорит Хенк Холтерман;но я хотел бы получить ответ на этот вопрос, скажем, на тот момент, когда BlackBoxObjectMaker на самом деле является черным ящиком.
Это будет тривиально в C ++, поэтому мне интересно, какие параметры доступны вC #.