using System.Collections.Generic;
static List<Level> lvls = new List<Level>();
public static void Main()
foreach (var type in Assembly.GetExecutingAssembly().GetExportedTypes())
if (type.BaseType == typeof(Level))
lvls.Add(type.GetConstructor(Array.Empty<Type>()).Invoke(Array.Empty<object>()) as Level);
foreach (var lvl in lvls)
Console.WriteLine(lvl.GetType().Name);
Console.WriteLine($"value : {lvl.Value} - color R:{lvl.Color[0]} G:{lvl.Color[1]} B:{lvl.Color[2]}\n");
public abstract class Level
public abstract float Value
public abstract byte[] Color
public class WaterLevel : Level
public override float Value => 0;
public override byte[] Color => new byte[3];
public class SandLevel : Level
public override float Value => 0.5f;
public override byte[] Color => new byte[3];
public class DritLevel : Level
public override float Value => 1;
public override byte[] Color => new byte[3];
public class RockLevel : Level
public override float Value => 1.5f;
public override byte[] Color => new byte[3];