Использовать в типизированной коллекции можно так:
public class BaseClass
{
public virtual string GetAbout()
{
return "I'm BaseClass";
}
}
//======================================================
public class InheritedClass : BaseClass
{
public int Age { get; set; }
public int GetAge()
{
return this.Age;
}
public override string GetAbout()
{
return "I'm InheritedClass";
}
}
//======================================================
List<BaseClass> collect = new List<BaseClass>();
collect.Add(new InheritedClass());
collect.Add(new BaseClass());
foreach(var item in collect)
{
Console.WriteLine(item.GetAbout());
var inheritedItem = item as InheritedClass;
if(inheritedItem != null)
{
Console.WriteLine(inheritedItem.GetAge());
}
}