У меня есть Базовый класс Room
public class Room
{
public int width;
public int height;
public int minX;
public int minY;
public Room(int width, int height, int minX, int minY)
{
this.width = width;
this.height = height;
this.minX = minX;
this.minY = minY;
}
public virtual void GenerateRoom()
{
}
}
Есть два типа номеров ProcedualRoom
и PredefinedRoom
public class ProcedualRoom: Room
{
public ProcedualRoomData data;
}
public class PredefinedRoom: Room
{
public PredefinedRoomData data;
}
Оба класса имеют свои соответствующие данные, которые отличаются друг от друга ProcedualRoomData
и PredefinedRoomData
В каком-то другом классе, где я загружаю все комнаты
ILoad[] objsToLoad = GetComponentsInChildren<ILoad>();
foreach (Room r in procedualDungeon.rooms)
{
foreach (ILoad obj in objsToLoad)
{
obj.Load(r);
}
}
Когда я загружаю Комнату, я должен выполнить typecast, как это
public void Load(Room room)
{
if (room is PredefinedRoom)
{
Load((room as PredefinedRoom).data);
}
else
{
ProcedualRoom pRoom = (room as ProcedualRoom);
Load(pRoom);
}
}
Есть ли какой-либо другой способ избежать типизации?