В настоящее время я работаю с базовым классом под названием "JourneyLeg" .Этот базовый класс имеет 5 производных, которые все наследуются от базового класса.два из этих классов называются "WalkingLeg" и "VehicleLeg" .Эти 2 производных класса содержат поля "от" и "до" .Остальные 3 - нет.
List<JourneyLeg> legs
Теперь у меня есть список со всеми видами производных объектов.Некоторые из них - Walkingleg, некоторые из них - Vehicleleg, а остальные - один из 3 других производных классов.Список определен, как указано выше.
Я хочу пройтись по всему списку и выполнять действия только для объектов для ходьбы и транспортных средств.Эти действия включают доступ к " из " и "к" .Эти 2 поля доступны только в этих 2 производных классах, но не в базовом классе.
Единственный способ, о котором я могу думать, - это проверить, является ли он одним из 2 производных классов, и затем выполнить действия (см. Ниже).Но так у меня так много дублирующего кода.Я думаю, что я не могу извлечь дубликат кода в методе, потому что тогда объект параметра, который мы даем этому методу, был бы VehicleLeg или WalkingLeg и не может быть и тем и другим.,Но я не могу обернуть голову вокруг этого.Я надеюсь, что кто-то может вернуть меня на правильный путь.
Ниже приведены классы:
/// <summary>
/// JourneyLeg is the base class used to define commonalities between:
///
/// *VehicleLeg, WalkingLeg, TransitionLeg, AdvertisementLeg*
/// </summary>
public class JourneyLeg
{
[Required]
public string Id { get; set; }
[Required]
public LegType Type { get; set; }
}
/// <summary>
/// Vehicle leg model
/// </summary>
public class VehicleLeg : JourneyLeg
{
[Required]
public ModalityType Modality { get; set; }
[Required]
public LegStop From { get; set; }
[Required]
public LegStop To { get; set; }
}
/// <summary>
/// Walking leg model
/// </summary>
public class WalkingLeg : JourneyLeg
{
[Required]
public LegStop From { get; set; }
[Required]
public LegStop To { get; set; }
/// <summary>
/// Displays the total walk time in minutes and in parenthese the distance in meters
/// </summary>
[Required]
public string Description { get; set; }
}