Похоже, вам нужно немного переосмыслить, как вы поступаете; если у вас есть другой класс, который должен использовать этот BaseClass
, не зная, какой тип производного класса он содержит, пока вы не вызовете метод, который кажется неэффективным.
public abstract class BaseClass
{
public abstract void InitializeAndDoOtherStuff();
}
public abstract class DerivedA
{
public overload void InitializeAndDoOtherStuff()
{
// Initializes the control, pass whatever you need into this method, etc)
}
}
В этом случае, ваш код выглядит так:
BaseClass bc = someVariable;
bc.InitializeAndDoOtherStuff();
ИЛИ
Это ужасная идея с точки зрения управления кодом, но вы могли бы сделать что-то вроде этого:
public class DerivedA : BaseClass, IControlA { }
public class DerivedB : BaseClass, IControlB { }
...
И тогда у вашего другого класса есть перегрузка s как так:
public void SomeMethod(IControlA control) { }
public void SomeMethod(IControlB control) { }
...
Затем в коде было бы так же легко, как:
BaseClass bc = someVariable;
SomeMethod(bc);
И перегрузки резолюции будет заботиться о нем, потому что соответствующий интерфейс только на одном производном классе.
Является ли 'SomeMethod' чем-то, что должен делать объект, или это что-то внешнее усилие делает с/объектом? –
Чтобы уточнить, класс, с которым я работаю, не является DerivedX, но действует на DerivedA ... DerivedZ и вызывает методы для разных действий. В основном, я пытаюсь избежать большого оператора switch (или if/else) и решил сделать SomeMethod (Производный A). Я мог бы сделать SomeMethodActOnDerivedA, SomeMethodActOnDerivedB и т. Д. Подумайте об этом как странице с различными пользовательскими элементами управления, и эти пользовательские элементы управления имеют общий базовый класс, но их нужно заполнять и действовать отдельно. –
Возможно, typeof() может выполнить эту работу за вас? –