Это выглядит нормально для меня.Важно, что вы использовали интерфейсы, чтобы абстрагировать реализацию шара от краски.
Однако ваш код немного не в порядке:
public override void Shoot(params IPaintBall[] paintBalls)
{
base.Shoot(paintBalls);
}
Обновление: в этомВ этом случае сделайте базовый класс защищенным и предоставьте новый метод для производного класса, но используйте базовую реализацию.
public class Prop
{
protected void Shoot(params IProjectile[] projectiles)
{
// logic goes here...
}
}
public class Car : Prop
{
public void Shoot(params IPaintBall[] projectiles)
{
base.Shoot(projectiles);
}
}
Не проверено в компиляторе, но я считаю, что базовые массивы ([]) являются ко-вариантами.
Обновление 2: В качестве альтернативы, определитеинтерфейс, отвечающий за съемку и предоставляющий ему метод Shoot.
public interface IProjectile { }
public interface IPaintBall : IProjectile { }
public interface IPotato : IProjectile { }
public interface IShoot<T> where T : IProjectile
{
void Shoot(params T[] projectiles);
}
public interface IShootPaintBalls : IShoot<IPaintBall> { }
public class Prop : IShoot<IProjectile>
{
public void Shoot(params IProjectile[] projectiles)
{
// logic
}
}
public class Car : Prop, IShootPaintBalls
{
public void Shoot(params IPaintBall[] projectiles)
{
base.Shoot(projectiles);
}
}
Обновление 3: Ответ GenericTypeTea завершает круг обобщений :-), мое текущее решение не мешает вам сниматьмашина с картошкой ...