naprawde nie macie co rozstrzasac..? zeby operowac na nie-statycznych polach obiektu X, inny obiekt Z musi posiadac chocby na moment referencje do X i kropka. podstawy OO sie klaniaja.
public class TreeList
{
private int mainitemsCount;
public MainItem CreateMainItem(){ return new MainItem(this); }
public class MainItem
{
public string Title {get; set; } //btw. od kawalka czasu tak mozna zaimplementowac proste property
public MainItem(TreeList parent)
{
(_parent=parent).mainitemsCount++; // nested-class ma dostep do private swojej containg-class
}
private TreeList _parent; //parent zapamietany tylko na potrzeby --
public dispose/finalize/itd itp
{
_parent.mainitemsCount--;
}
}
}
jak sie nie podoba konstruktor parametrowy, uzywaj CreateMainItem z jakiejs instancji obiektu klasy TreeView..
a tak na boku, nie wiem po co komu taka funkcjonalnosc.. wrzucaj predzej te MainItem do jakiejs kolekcji w TreeView i pytaj kolekcje o Counta.. roboty i nerwow sobie oszczedzisz
public class TreeList
{
private List<MainItem> items;
public MainItem CreateMainItem()
{ var newitem = new MainItem();
items.add(newitem);
return newitem;
}
public void ReleaseMainItem(MainItem item) //ew. mozna pomyslec o jakims MainItem:IDisposable i .Dispose+=...
{ items.Remove(item);
}
private int liczbaMainItem { get{return items.Count; } }
public class MainItem
{
public string Title {get; set; }
....
}
}
//edit: heh, nie potrzebnie wychodzilem na herbate po przeczytaniu watku.. zdazyl urosnac o pare nowych postow..
a co do zalet/wad nestedclass:
- wada: trzeba zawsze ja nazywac wraz z klasa otaczajaca, zaden using nie pomaga, musisz pisac: OuterClass.NestedClass
- wada: nestedclass'a bedzie faktycznie sie nazywala: TreeView+MainItem. jesli opierasz cos na reflection, Twoje cos moze nie lubic tego plusa
- zaleta: nestedclass ma gwarantowany dostep do wszystkich protected/private OuterClass'y, czasem to sie przydaje
- zaleta: nestedclass moze byc protected/private i przez to widoczna dla mniejszej rzeszy, mozna ich sobie zrobic gazillion i nie beda smiecic w namespace'ie