Imagine this code:
using System;
public enum BaseClassType
{
DerivedA,
DerivedB
}
public abstract class BaseClass
{
public BaseClassType Type;
public BaseClass(BaseClassType type)
{
Type = type;
}
public virtual void Interact()
{
Console.WriteLine("BaseClass.Interact()");
}
}
public class DerivedA : BaseClass
{
public DerivedA() : base(BaseClassType.DerivedA) {}
public void SomeMethodA(int signature0, float signature1)
{
Console.WriteLine("DerivedA.SomeMethodA");
}
}
public class DerivedB : BaseClass
{
public DerivedB() : base(BaseClassType.DerivedB) {}
public void SomeMethodB(float signature0)
{
Console.WriteLine("DerivedB.SomeMethodB");
}
}
public class Test
{
public static void Main()
{
BaseClass[] elements = new BaseClass[] { new DerivedA(), new DerivedB() };
foreach (var element in elements)
{
switch (element.Type)
{
case BaseClassType.DerivedA:
(element as DerivedA).SomeMethodA(5, 5f);
break;
case BaseClassType.DerivedB:
(element as DerivedB).SomeMethodB(3f);
break;
}
}
}
}
I wonder what is the best OOP way to get rid off this type of switch? Maybe some pattern? The methods of the subclasses have completely different signatures, so I cannot extract it and make virtual in the base class.