The fact that your parent object DisposeObject implements IDisposable doesn't mean it can then dispose anything that it references internally. The "objToDispose" can only be disposed if *it* implements IDisposable as well.
protected virtual void Dispose(bool disposing)
if (disposing && objToDispose is IDisposable)
disposed = true;
void FetchObjects(object objProgram)
List<object> lstTest = new List<object>();
Disposeable objDisposeable = new Disposeable(lstTest);