Вам нужно создать абстракцию (в этом случае мы будем использовать интерфейс), чтобы составить список классов, все классы должны реализовывать этот интерфейс.И тогда вы не будете делать список классов, а список этого интерфейса.
Я приведу простой пример:
// The abstraction
public interface IClass : IDisposable {
bool DoSomething();
void Initialize();
}
// First class
public class Class1 : IClass {
public void Dispose() {
// Dispose stuff
}
public bool DoSomething() {
//perform operations
return true; // the result of your operations
}
public void Initialize() {
// Do the initialization
}
}
// Second class
public class Class2 : IClass {
public void Dispose() {
// Dispose Stuff
}
public bool DoSomething() {
//perform operations
return true; // the result of your operations
}
public void Initialize() {
// Do the initialization
}
}
// Other classes ...
// ...
// Your method to perform the operations with a list of classes
List<IClass> myClassList = new List<IClass>();
myClassList.Add(new Class1());
myClassList.Add(new Class2());
//Adds more classes
foreach (IClass currentClass in myClassList) {
currentClass.Initialize();
if (!currentClass.DoSomething()) {
break;
} else {
currentClass.Dispose();
}
}
Примечание: Хотя я использовал интерфейс, вы могли бы сделать то же самое с помощью абстрактного класса (но выследует использовать его, только если классы имеют общее поведение, если нет, то лучше использовать интерфейс).
Как уже упоминалось, вы могли бы использовать отражение и выполнить то же самое, но так как вы сказали, что естьво многих классах этот подход будет работать лучше, потому что рефлексия будет намного дороже:)