Use Assembly.GetTypes () to get all types, and Type.IsAssignableFrom () to check inheritance. Let me know if you need code, or if you are using .NET 3.5. (Many reflection tasks like this are easier with LINQ to Objects.)
EDIT: as requested, here's an example - it finds everything in mscorlibthat it implements IEnumerable. Note that life is a little more complicated when the base type is shared ...
using System;
using System.Collections;
using System.Linq;
using System.Reflection;
class Test
{
static void Main()
{
Assembly assembly = typeof(string).Assembly;
Type target = typeof(IEnumerable);
var types = assembly.GetTypes()
.Where(type => target.IsAssignableFrom(type));
foreach (Type type in types)
{
Console.WriteLine(type.Name);
}
}
}