Are you looking for generics?
public class BaseClass<T>
where T : BaseObject
{
public T[] Objects;
public virtual void DoStuff()
{
}
}
public class DerivedClass : BaseClass<DerivedObject>
{
public override void DoStuff()
{
base.DoStuff();
}
}
T ( ), T BaseObject , BaseObject, DerivedClass DerivedObject T, DerivedClass Objects DerivedObject[].