public TreeNode(ITreeNode <T> parent, T value, ITreeFactory <T> treeFactory) { if (treeFactory == null) { throw new ArgumentNullException(nameof(treeFactory)); } this.Children = treeFactory.CreateCollection(this); this._parent = parent; this._value = value; }