Если родительский объект объекта существует и известен во время создания объекта, и у объекта никогда не будет другого родителя, часто полезно, чтобы каждый дочерний объект сохранял ссылку на родительский объект при его создании.Затем можно будет попросить дочерний объект сделать что-либо с участием его родителя, не передавая родительский объект в качестве аргумента, поскольку ребенок уже будет знать, кто его родитель.
Одна из сложностей, связанных с этим понятием, заключается в том, чтов зависимости от того, что делают классы, можно разрешить объектам родительского типа ограничивать, кто может создавать объекты с ними в качестве родительских.Если родительский и дочерний типы будут в одной сборке, это легко сделать с помощью модификатора internal
в дочернем конструкторе.Если кто-то хочет разрешить возможность того, что родительский объект может принадлежать классу, определенному в еще неписаной сборке, но предоставить таким родительским объектам гарантию времени компиляции, что они не будут «присоединены» без их «согласия»,Немного сложнее, но, вероятно, это можно сделать достаточно разумно, используя приватный конструктор и метод общедоступной фабрики:
public interface IAssuredParent<T>
static childClass createAttachedChild<T,U>(T parent) where T:IAssuredParent<U>
{...};
Если родитель определяет P
закрытый класс XYZ
и реализует IAssuredParent<XYZ>
, онбудет единственным классом, имеющим доступ к типу XYZ
, и, таким образом, единственным классом, который может успешно вызвать createAttachedChild с парой параметров типа, которые могут вместить фактический параметр типа P
и соответствовать ограничениям типа.