public class BaseTVItemViewModel<U> : ViewModelBase > where U : EntityObject > { > Interfaces.IsTreeModel<U> _treeModel; > List<BaseTVItemViewModel<U>> _children; > BaseTVItemViewModel<U> _parent; > > public BaseTVItemViewModel(Interfaces.IsTreeModel<U> tm) > { > _treeModel = tm; > } > > public BaseTVItemViewModel<U> Parent > { > get > { > if (_parent == null) > { > _parent = new BaseTVItemViewModel<U>((Interfaces.IsTreeModel<U>)_treeModel); > } > return _parent; > } > set { _parent = value; } > } > > public List<BaseTVItemViewModel<U>> Children > { > get > { > if (_children == null) > { > _children = new List<BaseTVItemViewModel<U>>(); > > foreach (U u in _treeModel.GenericChildren) > { > _children.Add(new BaseTVItemViewModel<U>((Interfaces.IsTreeModel<U>)u)); > } > } > return _children; > } > > } > > public virtual void LoadItems() > { > } > } >I wanted to make the LoadItems() method abstract but I can't make the class abstract because constructing a new instance of an abstract class (as in the Children property) isn't allowed :-{
abstract class AbstractBaseClass { protected AbstractBaseClass Child = null; //______________________________________________________________________ public abstract AbstractBaseClass Create(); //______________________________________________________________________ public abstract void LoadItems(); //______________________________________________________________________ public void xx() { Child = Create(); } //______________________________________________________________________ } class DerivedClass : AbstractBaseClass { //______________________________________________________________________ public override AbstractBaseClass Create() { return new DerivedClass(); // or AbstractBaseClass() } //______________________________________________________________________ public override void LoadItems() { Child = Create(); // } }