ModelとViewは分離し難しの続き。
コメントいただきました:
私のATOMEditorもそこで悩んでるんですが、
TreeNode.Tag方式からTreeNode派生方式に鞍替えしてます。
ただそうすると、ParentやらNodes(Children)やらの型で悩むわけです。
Parentはnewでキャストして返せばいいけど、Nodesのほうはそうもいかないし。
えーと...こーゆーこと↓なのかしら?
using System;
using System.Collections.Generic;
class Base {
private Base parent_;
private List<Base> children_ = new List<Base>();
private string name_;
public string Name { get { return name_; }}
public Base(string n) { name_ = n; }
public Base Parent { get { return parent_; }}
public IEnumerable<Base> Children { get { return children_; }}
public void Add(Base child) { children_.Add(child); child.parent_ = this; }
}
class Derived : Base {
public Derived(string n) : base(n) {}
public new Derived Parent { get { return (Derived)base.Parent; }}
public new IEnumerable<Derived> Children {
get {
foreach ( Base item in base.Children) {
yield return (Derived)item;
}
}
}
}
public class Program {
public static void Main() {
Derived root = new Derived("母");
root.Add(new Derived("長男"));
root.Add(new Derived("二男"));
root.Add(new Derived("三男"));
foreach ( Derived child in root.Children ) {
Console.WriteLine("{0} の親は {1}", child.Name, child.Parent.Name);
}
}
}