0
Рассмотрим следующий код:Как создать экземпляр определенного подтипа из массива параметров?
public abstract class BaseClass {
abstract void DoWork();
virtual void MoreWork() {
Console.WriteLine("MoreWork");
}
}
public class classA : BaseClass {
public void DoWork() { DoStuffA(); }
}
public class classB : BaseClass {
public void DoWork() { DoStuffB(); }
}
Я хочу иметь метод, к которому я хотел бы передать все эти типы и иметь их быть создан.
void Initialize(params BaseClass[] lst) {
for (int i = 0; i < objectList.Length; i++) {
Activator.CreateInstance(objectList[i]); // not sure if this works.
}
}
Initialize(classA, classB);
Как мне снять что-то подобное?
Вы не можете использовать '' classA' и classB' как значения; они являются типами. Вы можете использовать 'Initialize();' для универсального метода, но вы не можете создать нечто похожее на «params» для параметров типа. Или вы можете использовать 'Initialize (typeof (classA), typeof (classB));' как в ответе. Кроме того, многие вещи в вашем коде не компилируются, например, виртуальные методы (в том числе абстрактные) не могут быть частными, их переопределения должны объявлять одинаковый уровень доступа и использовать ключевое слово 'override'. –