У меня есть EnemyManager, который обрабатывает экземпляры классов, которые реализуют интерфейс: IEnemy.
public class EnemyManager
{
public void AddEnemy(IEnemy enemy)
{
// Initialize enemy ...
}
}
public interface IEnemy
{
void Init<T>(T enemyData);
}
Я хочу, чтобы каждый экземпляр инициализировался с другим пользовательским типом: EvilSkeletonData, BossEnemyData ... et c , Но я не хочу создавать перегрузку для каждого из этих типов данных, чтобы поддерживать мой интерфейс как можно более чистым.
Я думал, что Generics мог бы работать, но, возможно, это противоречит цели, так как мне нужно было бы явно преобразовать данные в каждой реализации IEnemy:
public class EvilSkeleton : IEnemy
{
public void Init<T>(T enemyData)
{
var enemyData = initParams as EvilSkeletonData;
if(enemyData != null)
{
// Logic here
}
}
}
Что будет чистым (и если возможно эффективный) способ решить эту проблему?