Допустим, у меня есть пара классов:
public class BaseClass
{
//....
}
public class ChildClassA : BaseClass
{
//....
}
public class ChildClassB : BaseClass
{
//....
}
Теперь у меня есть другой класс, который использует дочерние классы выше:
public class Program
{
private Type _type;
private ChildClassA _childA = GetChildClassA();
private ChildClassB _childB = GetChildClassB();
public void MethodOne()
{
if(_type == typeof(ChildClassA))
DoSomething(_childA);
else if(_type == typeof(ChildClassB))
DoSomething(_childB);
}
public void MethodTwo()
{
if(_type == typeof(ChildClassA))
DoSomething(_childA);
else if(_type == typeof(ChildClassB))
DoSomething(_childB);
}
}
Допустим, у меня есть предложение if внутриMethodOne
и MethodTwo
снова и снова в моем коде, как я могу сделать это чище?С помощью интерфейса я могу просто объявить одну переменную класса IBaseClass
и присвоить ей _childA
или _childB
.Но с унаследованными классами это невозможно.Есть ли другой способ получить тот же результат?Таким образом, в основном я хотел бы получить что-то вроде этого:
public class Program
{
private IBaseClass _child = GetChildClass();
public void MethodOne()
{
DoSomething(_child);
}
public void MethodTwo()
{
DoSomething(_child);
}
}
РЕДАКТИРОВАТЬ: Чтобы уточнить, я не могу использовать интерфейсы, так как все классы уже были реализованы с давних времен, и рефакторинг их будетогромное начинание.Поэтому я в основном ищу что-то похожее с базовыми и дочерними классами.
EDIT2: Вот что я имел в виду, комментируя ответ HimBromBeere:
private void DoSomething(BaseClass baseC)
{
var childA = baseC as ChildClassA;
if (childA != null)
childA.DoSomethingA();
var childB = baseC as ChildClassB;
if(childA != null)
childB.DoSomethingB();
}