Coming from C++ and having needed some simple class hierarchies, I can say that the is keyword is invaluable!
class MenuItem : Item { }
foreach(Item items in parent.ChildItems) {
if (item is MenuItem) { /* handle differently */ }
}
P.S. Isn't reflection slightly expensive, btw?