Добрый день. Вопрос пока более теоретический. Допустим у нас есть иерархия
class Vehicle {}
class Light : Vehicle {}
class Medium : Vehicle {}
class Heavy : Vehicle {}
Так же есть коллекция:
class VehicleCollection {
private List<Vehicle> vehicles = new List<Vehicle>();
public void AddVehicle (Vehicle vehicle) {
vehicles.Add( vehicle );
}
public void List<T> GetAllByType() where T : Vehicle {
List<T> list = new List<T>();
// todo
return list;
}
}
Подскажите, пожалуйста, как корректно написать метод, чтобы он возвращал массив экземпляров подтипа, при этом чтобы можно было передать только один из подклассов (скажем, RocketMan должен валиться на этапе компиляции). Как такое написать и на C# и на Java? Насколько такой код хорошо оптимизируется компилятором?
List<Light> lightVehicles = vehicleCollection.GetAllByType<Light>();
Самый простой пример подобного использования, который я знаю - GetComponent<>() в юнити:
Rectangle rectangle = GetComponent<Rectangle>();